引数名 | 初期値 | I/O | 詳細 |
ticket | - | In | 変更する注文のチケット番号
|
price | - | In | 新しい注文価格(保留中の注文のみ)
|
stoploss | - | In | 新しいストップロス価格
|
takeprofit | - | In | 新しいリミット価格
|
expiration | - | In | 新しい有効期限(保留中の注文のみ)
|
arrow_color | - | In | stoploss、takeprofit変更の矢印の色。
パラメータを設定しない又はCLR_NONEを設定した場合は描画しません。 |
#property strict // strictは絶対に削除しない事 #property script_show_confirm #include <stdlib.mqh> static bool EntryBool = false; //+------------------------------------------------------------------+ //| スクリプトスタート //+------------------------------------------------------------------+ void OnStart(){ int order_resend_num; // エントリー試行回数 int ea_ticket_res; // チケットNo int errorcode; // エラーコード double ea_order_entry_price; // エントリーレート if ( EntryBool == false ) { EntryBool = true; } else { return; } if ( IsDemo() == false ) { MessageBox("実際に新規オーダーするので、デモ口座で動作させて下さい。", "エラー",MB_ICONEXCLAMATION); return; // 処理終了 } ea_order_entry_price = Ask; // 現在の買値でエントリー for( order_resend_num = 0; order_resend_num < 10; order_resend_num++ ) { // エントリー試行回数上限:10回 if ( IsDemo() == true ) { // FXCMでは新規エントリー時にストップ/リミットを設定出来ない。 ea_ticket_res = OrderSend( // 新規エントリー注文 Symbol(), // 通貨ペア OP_BUY, // オーダータイプ[OP_BUY / OP_SELL] 0.01, // ロット[0.01単位] ea_order_entry_price, // オーダープライスレート 20, // スリップ上限 (int)[分解能 0.1pips] 0, // ストップレート 0, // リミットレート "テストオーダー", // オーダーコメント 999, // マジックナンバー(識別用) 0, // オーダーリミット時間 clrRed // オーダーアイコンカラー ); } if ( ea_ticket_res == -1) { // オーダーエラー errorcode = GetLastError(); // エラーコード取得 if( errorcode != ERR_NO_ERROR ) { // エラー発生 printf("エラーコード:%d , 詳細:%s ",errorcode , ErrorDescription(errorcode)); if ( errorcode == ERR_TRADE_NOT_ALLOWED ) { // 自動売買が許可されていない MessageBox(ErrorDescription(errorcode),"オーダーエラー",MB_ICONEXCLAMATION); return; } } Sleep(1000); // 1000msec待ち RefreshRates(); // レート更新 ea_order_entry_price = Ask; // 更新した買値でエントリーレートを再設定 printf("再エントリー要求回数:%d, 更新エントリーレート:%g", order_resend_num+1 ,ea_order_entry_price); } else { // 注文約定 Print("新規注文約定。 チケットNo=",ea_ticket_res); Sleep(300); // 300msec待ち(オーダー要求頻度が多過ぎるとエラーになる為) // エントリー中ポジションの注文変更 LimitStop_Set(ea_ticket_res); break; } } } // エントリー中のポジションのリミット・ストップを変更 void LimitStop_Set( int in_ticket_no ) { double limit_rate,stop_rate; int modify_resend_num; // 変更試行回数 bool modify_ret; // 変更判定 int errorcode; bool selbool; selbool = OrderSelect(in_ticket_no, SELECT_BY_TICKET); // オーダー中のチケット選択(チケットNo指定) limit_rate = OrderOpenPrice() + ( 10 * Point() * 10); // リミット価格 = 約定価格 + 10.0pips stop_rate = OrderOpenPrice() - ( 10 * Point() * 10); // ストップロス価格 = 約定価格 - 10.0pips limit_rate = NormalizeDouble(limit_rate , Digits() ); // リミット価格 を正規化 stop_rate = NormalizeDouble(stop_rate , Digits() ); // ストップロス価格を正規化 for( modify_resend_num = 0; modify_resend_num < 20; modify_resend_num++ ) { // 試行回数上限:20 modify_ret = OrderModify( OrderTicket(), // チケットNo OrderOpenPrice(), // 注文価格 stop_rate, // ストップロス価格 limit_rate, // リミット価格 OrderExpiration(), // 有効期限 clrRed // 色 ); if ( modify_ret == false ) { // 注文変更拒否 Sleep(300); // 300msec待ち errorcode = GetLastError(); // エラーコード取得 printf( "%d回目:注文変更拒否。エラーコード:%d , 詳細:%s ", modify_resend_num+1, errorcode , ErrorDescription(errorcode)); } else { // 決済注文約定 Print("注文変更完了。 チケットNo=",in_ticket_no); break; } } }
open #15196788 buy 0.01 EURUSD at 1.11952 ok 新規注文約定。 チケットNo=15196788 modify #15196788 buy 0.01 EURUSD at 1.11952 sl: 1.11852 tp: 1.12052 ok 注文変更完了。 チケットNo=15196788