メタトレーダー(MT4)で半自動売買のソフトを作成中。質問1は注文の決済確認方法について。質問2はストラテジーテスターでの指値注文の検証方法について。

このQ&Aのポイント
  • メタトレーダー(MT4)で半自動売買のソフトを作成中ですが、質問1では注文の決済確認方法について教えていただきたいです。マジックナンバーかチケットナンバーで判明できると助かります。
  • 質問2では、指値注文の自動売買をストラテジーテスターでビジュアルモードで検証する方法について知りたいです。指値に達しても約定しない場合の検証方法を教えていただけると嬉しいです。
回答を見る
  • ベストアンサー

メタトレーダー(MT4)にて半自動売買のソフトを作成しております。

メタトレーダー(MT4)にて半自動売買のソフトを作成しております。 プログラミングに行き詰まっておりますので、どなたか経験のある方ご存じの方がいらっしゃいましたらご教授下さいませ。 下記の様に指値売り又は指値買いのプログラムを作っております。 これは、ある条件のトラップを仕掛け、希望の指値に達すると売り注文または買い注文を行います。 このトラップを複数仕掛けております。 このうち一つでも決済されれば、あるものは損切りもしくは決済を行ったり、注文取消を行ったりしたいのです。 例えば95円で売り注文、ストップロスが「95+0.6」,決済値が「95-0.3」。 double pr1 = 95;  //例えば95円 chiket1 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr1,3,pr1+0.6,pr1-0.3,"",123451,0,Red); chiket2 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr2,3,pr2+0.6,pr2-0.3,"",123452,0,Red); chiket3 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr3,3,pr3+0.6,pr3-0.3,"",123453,0,Red); chiket4 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr4,3,pr4+0.6,pr4-0.3,"",123454,0,Red); chiket5 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr5,3,pr5+0.6,pr5-0.3,"",123455,0,Red); 質問1.この注文のうち、どれが決済されたかが確認出来る方法もしくは関数が知りたいのです。 マジックナンバーもしくはチケットナンバーで判明出来れば有りがたいのですが。 出来れば質問2もお願いします。 質問2.指値注文の自動売買は、ストラテジーテスターにてビジュアルモードで検証出来ないので検証する方法があれば知りたい。(指値に達しても約定しない) 以上宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こちらの記事で回答してみました。 よろしければごらんいただければと思います。 http://ameblo.jp/ftlabo-kirin/entry-10675218310.html

robotanmarch
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 結果待ちに時間が掛かってしまいました。 結果、なんとか動くソフトが出来つつあります。 有り難うございました。

robotanmarch
質問者

補足

早速のご回答有り難う御座います。 家に帰り早速試したいと思っております。 ただ、ストラテジーテスターでは旨くテストが出来ないため、デモ口座を利用し試験をするため、結果がいつ出るかはなかなか分かりません。 困っております。 しかし、Start()関数の中でループしており、例えば、3つの約定されたポジションの内一つ決済されれば2個になりいつも現在数が確認されます。 ところが、オーダーされて決済されたマジックナンバー(false)とオーダーされていなくて勿論決済もされていないマジックナンバーの区別はこれで確認出来るのでしょうか。 イマイチ理解出来ておりません。 宜しくお願い致します。 //オーダーの有無を調べる bool FTLOrderSelect(int magic, int type = -1) { for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS) == false) break; if(OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue; if(OrderType() != type && type != -1)continue; return(true); } return(false); }

その他の回答 (1)

noname#259269
noname#259269
回答No.2

No.1さんの記載したソースコードの中で使われている関数のリファレンスを調べていけば判る事です。 http://www.metasys-seeker.net/MQL4_Reference_ver1/20-26_OrderType.html

関連するQ&A

  • 株の自動売買ツール、Uターン注文について

    株の売買で、自動売買Uターンツールについて、詳しい方、お教え願います。 Uターンツールは、株の買注文と同時に、売注文を登録できるツールですが、 色々な制約もあるように思います。 例えば 1・買注文が成立し・売注文のUターン注文を取消し、ストップロスの逆指値買注文に変更はできません。(注文失効しないと、変更できない)こんな時、どの様な対処法がありますか? 2・上記の対処法として、Uターン注文の価格を、ストップロス価格に、修正することは出来るのでしょうか?(買注文価格を下回る、ストップロス価格に変更) 3・Uターン注文を使用する場合の注意点をご存知でしたら、お教えください

  • MT4でのカウントダウン方式でのEAについて

    MT4初心者です。 サイバーエージェントMT4のデモトレードでEA作成にチャレンジしております。 EAのプログラムではストップロスの値幅とテイクプロフィットの値幅をexternでパラメーターに設定し、OrderSend関数の引数として代入していたのですが、サイバーエージェントではカウントダウン注文方式なので、エントリーの際にOrderSend関数でスリッページとストップロス、テイクプロフィットの値を0にしないとエントリーが出来ない事を知りました。 とりあえず、上記の値を0にしデモトレードをしてみたのですが、エントリーには成功しました。 ただ、エントリーは出来ても当然、指値・逆指値の注文が入らないので、エントリー後に注文を入れようと思い、OrderModfiyの関数を使ってみて下記の様なプログラムを組んでみたのですが、エントリー後もOCO注文は入りません。 MyOrderSendSL(OP_BUY, Lots, Ask, 0, 0, 0, COMMENT, MAGIC); OrderModify(OrderTicket(), 0, OrderOpenPrice()-SLpips*Point, OrderOpenPrice()+TPpips*Point, 0); 初心者の為、全くのおかど違いな事をしているのかも分からない状態です。 エントリー後、直ぐににオープンポジション(約定値)に対してのOCO注文(出来れば値幅をパラメーターとした注文)のプログラムの組み方をご存知の方がいらっしゃいましたら教えていただけますでしょうか。

  • ネットで株の売買を実際にしたことがありません。本を読んでいたら、自動売

    ネットで株の売買を実際にしたことがありません。本を読んでいたら、自動売買の逆指値注文について書いてありました。そこで質問です。 1.自動売買では、指値注文というのはできないのですか。 2.逆指値注文とは、「ある価格以上なら買い」、「ある価格以下になったら売り」という注文です、と説 明がありました。  例えば 100円で買って、110円で売りたい場合。  「ある価格以上なら買い」の欄?に100と入力  「ある価格以下になったら売り」の欄?に110と入力  では、指値注文と同じ発注の仕方ではないかと思うのですが。

  • MT4の勉強でつまりました

    前日の4本値とフィボナッチを利用して当日の売り買いを自動的に行なうプログラムを考えてみました。 しかし、書物を参考にしていることもあってか、うまくいきません。 仕事に出かける時間が早いので標準時間(夏;6:00 冬;7:00)にエントリーできません。 流れとして 標準時間にプログラムスタート→前日分を決済→計算式に基づいてエントリーする。 初心者に付き問題点をわかりやすくご指導ください。 //マジックナンバーの定義 #define MAGIC 7 //パラメーターの設定// extern double Lots = 1.0; //取引ロット数 extern int Slip = 10; //許容スリップページ数 extern string Comments = ""; //コメント //変数の設定// int Ticket_L = 0;//買い注文の結果をキャッチする変数 int Ticket_S = 0;//売り注文の結果をキャッチする変数 int Exit_L = 0; //買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; //売りポジションの決済注文の結果をキャッチする変数 int start() { //買いポジションのエグジット { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if(Exit_L == 1){Ticket_L =0;} } //売りポジションのエグジット { Exit_S = OrderClose(Ticket_S,Lots,Bid,Slip,Blue); if(Exit_S == 1){Ticket_S =0;} } //買いエントリー if(((iHigh("GBPJPY",1440,1)-iLow("GBPJPY",1440,1))*0.5+iLow("GBPJPY",1440,1))<((iOpen("GBPJPY",1440,1)+iClose("GBPJPY",1440,1))/2 { Ticket_L = OrderSend(Symbol(),OP_BUY, Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } //売りエントリー if(((iHigh("GBPJPY",1440,1)-iLow("GBPJPY",1440,1))*1.382+iLow("GBPJPY",1440,1))>((iOpen("GBPJPY",1440,1)+iClose("GBPJPY",1440,1))/2 { Ticket_L = OrderSend(Symbol(),OP_SELL, Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); }

  • FX自動売買について

    (1)FX会社の米国夏時間(AM6:00)に合わせてログイン (2)前日の注文を結果の如何にかかわらず決済 (3)前日の4本値(日足)をCSV形式で書き出し、エクセルの表に貼り付け (4)エクセルの表の計算式から売り・買いを判断し成り行き注文 といった一連のデートレードを自動手配する方法を教えていただけませんか? 自動手配の関連では、メタトレーダーの記事をよく目にしますが、上記の方法が自動では難しく エクセルの計算がメタトレーダーを使ってできるのであればそれでも構いません。 よろしく御指導をお願いします。

  • MT4のSendOrderについて

    最近MetaTrader4(MT4)に興味を持ち始めたものです。 早速試しに簡単なEAを作ってみているのですが、 OrderSendを行う際に思う様に約定できずこまっています。 詳細としてはOrderSendにて、成行注文と同時に利益確定注文、 損切り注文をだしていますが、常にチケットが「-1」で約定する気配がありません。 問題となっている部分は利益確定と損切り注文の部分である可能性が非常に高いです。 通貨:EUR/USD デモ口座:OLD、Forex ※OLDは成行注文と利益確定、損切りを同時に出せない? 一部買い注文する部分のソースを抜粋します。 //損切、利確用変数初期化 double TakeProfit = 0.0020; double StopLoss = 0.0015; //現在の終値より損切、利確の値の計算 TakeProfit = Close[0] + TakeProfit; StopLoss = Close[0] - StopLoss; //注文 Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,StopLoss,TakeProfit,Comments,MAGIC,0,Red); ちなみに「利益確定と損切り注文の部分である可能性が非常に高い」の理由としては 以下の様に、利益確定と損切りをしない注文を行うと正常に約定されるためです。 Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,Comments,MAGIC,0,Red); 利益確定と損切り注文が取得ポジションに近すぎるのかな?とも少しおもっているのですが、 ストップレベルという値を取得するとわかるみたいな情報があったので、取得してみると、 「ストップレベル:1.00000000」この値についてもどう解釈すればよいのかが不明です。 この内容で質問として情報が足りているか少し不安ですが、ご教授お願いします。 (その他、実際のMT4口座選で、ここはオススメなどあれば教えてもらえるとうれしいです。)

  • 成り行き買い注文で約定したものを自動的に売り注文を出す自動売買システム

    成り行き買い注文で約定したものを自動的に売り注文を出す自動売買システム□■□■相場が開く前に成り行きで買い注文を入れておき、場が開き100円で約定したとします。そしてその株を、約定した価格から10円上がった価格(この場合だと110円)で指値売り注文を自動的に出すことの出来る自動売買システムのある証券会社はありますでしょうか? 御存知の方、教えていただけないでしょうか。

  • mt4のプログラムについて

    プログラムのコンパイルは問題ありませんが、エラー130が出てバックテストが出来ない状況です。 原因を教えて頂けますか。 int start() { if(OrderTotal()==0){ ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,StopLoss,TakeProfit,Magic,0,Color) } //ordertotalがなければ成り行きでbuyを建てる if(OrdersTotal()==1){ if(OrderSelect(ticket,SELECT_BY_POS,MODETRADES)=1){ ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,OrderOpenPrice()-0.20*Point,Slippage,StopLoss,TakeProfit,Magic,0Color) } //ordertotalが1で、且つ約定ポジションと未約定ポジションの合計が1の場合、orderopenpriceから-20pip下がった所にsellstopの注文を入れる。 } 以上の様にeaを制作したところ、buyは問題なく建ちましたが、sellの注文がエラー130となり注文が出来ない状態です。 ポイントは20離しておりますので、ポイント制限には該当しておりません。 何故stop値が無効となるのでしょうか?

  • GMOクリック証券のCFDについて

    決済注文と逆指値注文は個別に出すことはできず、ストップロスを置くにはOCO注文しかないと言われたのですがCFD(もしくは他の商品全般も?)ってそういうものなのでしょうか?BTCFXでは出来るので戸惑ってます。

  • マネックストレーダー自動売買の設定について

    マネックストレーダーでプログラムトレーディングをする時の設定の用語について教えて下さい。 リアルモードで戦略を選択した後、 プログラムトレーディングの設定というウインドウが出てくると思います。 1)売買タブの中の「売買単価」というのは自動発注するときに設定値の価格で指値注文をするのでしょうか? 例えば、現在値+5に設定し、現在値100で買いシグナルが発生したら、105で指値注文をするのでしょうか? 2)投資上限設定タブの中の「累積許容株数」とはどういう意味でしょうか? 保有できる株数は設定した累積株数までで、その範囲内で売買を行うという意味でしょうか? 例えば、累積株数を100と設定したら、株数が100になるまでは売買を続け、100になったら買い注文しなくなるのでしょうか。(株が売られれば、また買い注文できる) それとも、設定した累積株数に到達したら、その日の売買を停止するということでしょうか? 例えば、累積株数を100と設定したら、株数が100になるまでは売買を続けるが、100になったらその日は売買をしなくなる。 累積回数は買い増しができる回数でしょうか?売買回数でしょうか? よろしくお願いします。