MT4のSendOrderについて

このQ&Aのポイント
  • MT4のSendOrderについて質問があります。
  • 成行注文と利益確定注文、損切り注文を同時に行うと約定しない問題があります。
  • 利益確定と損切り注文が取得ポジションに近すぎる可能性があるため、ストップレベルの値を取得してみたが解釈が分からないです。
回答を見る
  • ベストアンサー

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口座選で、ここはオススメなどあれば教えてもらえるとうれしいです。)

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

  • ベストアンサー
  • Saitar
  • ベストアンサー率41% (192/464)
回答No.3

No.1です。 大分様子が分かりました。 まず、FXCMはカウントダウンという注文方式をとってます。これは注文するときのダイアグラムを見ると、注文種別に「カウントダウン」と書いてあり、さらに、S/L、T/Pの値が薄く0.000と表記され変更ができなくなっています。 つまりは、FXCMは注文時にはS/L,T/Pの設定ができないのです。これは、FOREX.COMも一緒です。 また、ストップレベルを調べるため、 Print("ストップレベル:" + MarketInfo(Symbol(),MODE_STOPLEVEL)); という関数を用いてますが、ここでの+は通常、文字形式の値を繋げるものでありますが、MarketIndo関数はDouble形式なので、正しく表記されていないものと思われます。上記は、 Print("ストップレベル:",MarketInfo(Symbol(),MODE_STOPLEVEL)); とすれば、正しくSTOPLEVELが表記されます。試して見て下さい。 さて、FXCMで上記の方法でSTOPLEVELを調べると、STOPLEVELが0であることが分かります。 これ自体は全く問題ないことで、どういうことかと言いますと、 (1)まずは、S/L,T/Pを設定せずに、ポジションを建てる。 (2)OrderModify関数などで、S/L,T/Pを後から設定する。 (3)その際に、FXCMのSTOPLEVELは0なので、現在値と離す必要はない。 ということです。 なお、FOREX.COMのSTOPLEVELは1なので、1pip離さないといけないことになります。 もう少し、大きなSTOPLEVELが見たい場合は例えば、海外業者になりますが、HPは日本語表記されているので、なじみ易いところで、FXDD Maltaなどでデモ口座を開くと、STOPLEVELは40であることが分かります。また、FXDDは成り行き注文方式をとっており、注文時にS/L,T/Pの設定ができます。 (このカウントダウンとか、成り行き注文方式というのが言葉的になじめないのですが、そういうものだと思って下さい) なお、FXCMジャパンは12/17頃に注文方式を変更する旨のメールが来てました。具体的にどのようになるのか、不明な部分もありますが、ご注意下さい。 ご質問頂いたことは以上で回答できてますでしょうか。 ご確認下さい。

nokonoko00
質問者

お礼

丁寧なご対応、本当に有難うございます。 MT4の提供会社で注文種別なる違いがあるのですね。 これだけの情報があれば次のステップに進めそうです。 Print関数についても補足有助かります。 実はその表記方法(「+」で本当にいいのか?)も少し悩んでいました。 ※コンパイルできて表示もされていたのでOKなのかと・・・ さっそく別方法での指値注文をためしてみます。

その他の回答 (2)

  • Saitar
  • ベストアンサー率41% (192/464)
回答No.2

No.1です。 「ストップレベル:1.00000000」というのも見たことがありません。 ぜひ、あなたがトライしている業者のデモ口座でテストしてみたいと思います。 ちなみに、ストップレベルというのは、SLやTPを設定する場合に現在値から離さないと いけないPipsの値であり、5とか10とかの値が通常です。

nokonoko00
質問者

お礼

有難うございます。

nokonoko00
質問者

補足

ありがとうございます。 >ストップレベルというのは、SLやTPを設定する場合に >現在値から離さないといけないPipsの値 認識としてはやはり上記の様な考えになるのですね。 出力してみた2つのデモトレード共に以下の様な値だったので 何か勘違いしているのかと思っていました。  【出力しているソース部分】  Print("ストップレベル:" + MarketInfo(Symbol(),MODE_STOPLEVEL));  【FOREX.com】  2011.11.22 00:20:37 scalp_A EURUSDFXF,M5: ストップレベル:1.00000000  【FXCMジャパン】  2011.11.22 21:54:52 scalp_A EURUSD,M5: ストップレベル:0.00000000  ※こっちは更にヒドイ感じですね。0.0000…って(汗  もしよろしければ、ストップレベルが5や10になるであろうデモ口座を  教えて頂けないでしょうか。  こちらでも確認してみようかと思いますので。  よろしくお願い致します。

  • Saitar
  • ベストアンサー率41% (192/464)
回答No.1

いくつかコメントすべき点があるように思いますが、まず、業者名ですが、「OLD、Forex」となってますが、ODLの間違いかと思うもののODLは既にないし、「OLD、Forex」という業者名は正しいでしょうか?

nokonoko00
質問者

お礼

有難うございます。

nokonoko00
質問者

補足

早速の情報ありがとうございます。 すいません。口座の正式名称を確認しました。 >ODLの間違いかと思うもののODLは既にないし・・・ 確認しました。 どうやらODLとFXCMが合併したようですね。 確かこのFXCMジャパンでデモ口座を開いたと記憶しております。  http://www.fxcm.co.jp/service/mt4.html インストールすると「ODL MetaTrader」がインストールされたので、 MT4のシステムとしてはODLの物を使用しているのかもしれません。 >Forex 正式名称は「FOREX.com」となります。 http://jp.forex.com/jp/features/open_demo.shtml よろしくお願いいたします。

関連するQ&A

  • 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値が無効となるのでしょうか?

  • メタトレーダー(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.指値注文の自動売買は、ストラテジーテスターにてビジュアルモードで検証出来ないので検証する方法があれば知りたい。(指値に達しても約定しない) 以上宜しくお願い致します。

  • 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円逆に動いたら損切り、約定値から2円 利益が乗ったら利益確定といったような注文をだせるFX会社はありますか? よろしくお願い致します。

  • 成行IFD注文

    成行IFD注文 成行で注文し、成行と同時に約定した値から損切りと利食いの注文が同時に発注できる業者を探しています。マネーパートナーズのストリーミング注文で決済注文を同時に発注するのと同様の機能です。 約定能力が高く、スプができるだけ狭い会社がありましたら教えて下さい。

  • 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. 現在ってその日に委託保証金に振替とかできて、そのような方法が可能でしたっけ? 昔は翌日? 3営業日? にならないと無理だったような… 2. 成行で決済してすぐに買いで成行買いとのことですが、利確のお金を信用口座に振替とか必要ですよね? それをパパッとやって成行注文ってことですか? ※逆に空売りの利益確定でさらに下がると思ってるなら成行で同じ株価で空売りです 3. 本には、実際は利益確定したらその利確分をさらに投資に上乗せして回せるので途中で利確しないで長期投資より、この方法がお勧めと書いてましたが… 手数料以外にデメリットはありますか? 以上、よろしくお願いします。

  • MT4のOrderSendでエラーになります…

    以下のように、OrderSendで新規注文を行うプログラムを作成してみましたが、GetLastError()でエラー(4055)になってしまいます。 4055は、「カスタムインジケータエラー」とのことですが、どのように修正すればよいのか分かりません。 どうか、ご教示頂きたくよろしくお願い致します。 ちなみに、FXDD(デモ口座)のEURJPY(5分足)でテストしています。 bool EFlg=true; int start() { if(EFlg) { EAticket = OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order #2",16384,0,Green); if(EAticket < 0 ) Alert("Order Failed #",GetLastError()); else Alert("OK!!"); EFlg = false; } return(0); }

  • 利益確定を伸ばすコツを教えて下さい。

    「95パーセントの初心者は、利確が早くて損切りが遅いので失敗する。」とよく言われますが、損切りを早くする方法はなんとなくわかるのですが、利確を伸ばす方法が今ひとつ見つかりません。 利益確定を伸ばすコツを教えて下さい。

  • MT4のEAがエントリーしません

    上向きの移動平均線をローソク足が下から抜けたら買いエントリーし、4本値すべて移動平均線の下にいったらイグジット、売りは逆というEAをiCutomの本を見ながら作ってみたのですが、ポンド円の一分足で半日稼働したけれど全くエントリーしませんでした。どこがわるいのでしょうか?宜しくお願いします。(以下が内容です)因みにコンパイルしてエラーはありませんでした。 // マジックナンバーの定義 #define MAGIC 5582 // パラメーターの設定// extern int MA_Period = 21; // 短期移動平均線の期間設定 extern int MA_Shift = 0; // 移動平均を右にシフトするバー数の設定 extern int MA_Method = 0; // 移動平均方法の設定 extern double Lots = 1.0; // 取引ロット数 extern int Slip = 100; // 許容スリッページ数 extern string Comments = " "; // コメント // 変数の設定// int Ticket_L = 0; // 買い注文の結果をキャッチする変数 int Ticket_S = 0; // 売り注文の結果をキャッチする変数 int Exit_L = 0; // 買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; // 売りポジションの決済注文の結果をキャッチする変数 double MA_2 = 0; double MA_1 = 0; int start() { MA_2 = iCustom(NULL,0,"Moving Averages",MA_Period,MA_Shift,MA_Method,0,2); MA_1 = iCustom(NULL,0,"Moving Averages",MA_Period,MA_Shift,MA_Method,0,1); // 買いポジションのエグジット if( MA_1 >= High[1] && ( Ticket_L != 0 && Ticket_L != -1 )) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } // 売りポジションのエグジット if( MA_1 <= Low[1] && ( Ticket_S != 0 && Ticket_S != -1 )) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S ==1 ) {Ticket_S = 0;} } // 買いエントリー if( MA_2 <= MA_1 && MA_1 > Open[1]&& MA_1 > Close[1] && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } // 売りエントリー if( MA_2 >= MA_1 && MA_1 < Open[1]&& MA_1 > Close[1] && ( Ticket_S == 0 || Ticket_S == -1 ) && ( Ticket_L == 0 || Ticket_L == -1 )) { Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); }