現在、ある条件において注文を出すということを行い、その後SLTPをセットするという流れでやっています。
Entry注文に関しては成行となり、カウントダウン方式の為、同時に設定ができない(らしい)ので、Entry後にModifiedする流れになっています。
全体的な流れをコードで書いていきます。
MQL
1//Property 2long order_magic = 11111; 3double input_sl = 0.3; 4double input_tp = 0.6; 5int select_hour = 3; 6int select_min = 00; 7datetime timeLimit = 0; 8 //他にもありますが、とりあえず、、、 9 10//Expert tick function 11void OnTick() 12{ 13 //時間関係 14 datetime tm = TimeCurrent(); 15 MqlDateTime stm; 16 TimeToStruct(tm, stm); 17 18 //条件として、指定した時分の時だけ処理を行います 19 if(select_hour == stm.hour && select_min == stm.min && timeLimit < tm) 20 { 21 //まぁいろいろちょっと値の取得なりなんなりがありますが、、、それらが終わって 22 23 //Entry注文 24 MqlTradeRequest request = {0}; 25 MqlTradeResult result = {0}; 26 27 //いろいろ設定していきますが、省略させていただきます。 28 request.action = TRADE_ACTION_DEAL; 29 30 //OrderSend 31 if(!OrderSend(request, result)) { //Error表示 } 32 33 //時間を空けます(すぐにやるとどうもうまくいかなかったので) 34 Sleep(3000); //3秒 35 36 //現在のポジション✓を行います 37 int total = PositionsTotal(); 38 39 //forで回しながら一つずつ条件判定を行います 40 for(int i = 0; i < total; i++) 41 { 42 ulong position_ticket = PositionGetTicket(i); 43 ulong magic = PositionGetInteger(POSITION_MAGIC); 44 double sl = PositionGetDouble(POSITION_SL); 45 double tp = PositionGetDouble(POSITION_TP); 46 47 //もしも、Entry時のマジックナンバーが一致し、そのSLとTPが設定されていなかったら、SLTPをセットする 48 if(magic == order_magic && sl == 0 && tp == 0) 49 { 50 double price = PositionGetDouble(POSITION_PRICE_OPEN); 51 52 //SLとTPの設定 53 54 ZeroMemory(request); 55 ZeroMemory(result); 56 57 //パラメータを設定して 58 59 if(!OrderSend(request, result)) { //Error表示 } 60 } 61 } 62 //timeLimitの設定 63 timeLimit = tm + 120; 64 } 65}
省略しながら書きましたが、とりあえず、基本的には動作確認はしまして、実際に動作しています。
しかし、ある条件においてはSLTPがModifiedできない状況があります。
###エラーに関して
基本的に表示されるエラーは「Invalid Stops」ということで、Entryして3秒後の価格が設定したいSlまたはTPに近すぎてSetできないという状況なのかなと、認識しています。
では、このエラーに対してどういうアプローチがいいのか?を考えています。
例えば、A通貨ペアにおいて、現在の価格から0.054離れていないと注文ができないという状況だとします。
設定したい値はEntry時の価格から0.1の場所とします。
1.
Entry価格=100.000円
設定したいSL又はTP価格=100.100円
Entry後3秒後の価格=100.060円
2.
Entry価格=100.000円
設定したいSL又はTP価格=100.100円
Entry後3秒後の価格=100.060円
その後100.010円とかになった時
3.
一瞬で動いて、そもそも3秒後には100.100円まで到達していた時
SLTPでError表示の部分に関して、そうなった場合、価格の監視をスタートして、設定した値に到達した場合は成行決済?
到達せずに設定できるポイントまで価格が変わったら再度SLTP?
どのようにアプローチされているでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/25 00:18
2020/09/25 00:56
2020/09/26 03:28