エラー#130 invalid stoplossに関するヘルプが必要です。 - ページ 3 1234 新しいコメント 削除済み 2011.11.11 07:53 #21 同じ問題です。注文は、stoploss = 0 と takeprofit = 0 でうまく開きます。 しかし、その後OrderModifyが失敗します。 以下のコードは、前回の投稿から上のコードの後に実行されています。 bool modify = false; entry_price = OrderOpenPrice(); if(long) { SL = MarketInfo(Symbol(), MODE_BID) - stoploss * MarketInfo(Symbol(), MODE_POINT); TP = MarketInfo(Symbol(), MODE_BID) + takeprofit * MarketInfo(Symbol(), MODE_POINT); modify = OrderModify(result_ticket, entry_price, SL, TP, Red); } else { SL = MarketInfo(Symbol(), MODE_ASK) + stoploss * MarketInfo(Symbol(), MODE_POINT); TP = MarketInfo(Symbol(), MODE_ASK) - takeprofit * MarketInfo(Symbol(), MODE_POINT); modify = OrderModify(result_ticket, entry_price, SL, TP, Green); } Log("[5] SL: " + SL); Log("[5] TP: " + TP); if(!modify) { Log("error="+GetLastError()); return(-1); } Log ist: #ESZ1,M5:オープニングポジション #ESZ1,M5: tickvalue: 12.50000000 #ESZ1,M5:ポジションサイズ:1.00000000 #ESZ1,M5:アスク/ビッド 1242.00000000/1241.75000000 #ESZ1,M5:スプレッド 0.25000000 #ESZ1,M5: オープン #13679252 買い1.00 #ESZ1 1242.00でOK #ESZ1,M5: 注文 13679252 成功裡にオープン #esz1,m5: sl: 1241.25000000 #ESZ1,M5: TP: 1242.25000000 #ESZ1,M5:エラー=130 というわけで、最初にオープンしてストップロスを設定してもうまくいかないようです :-/。 Need Help with Error マーケットでの公開前にトレードロボットに行うべき検査 多通貨エキスパートアドバイザーの開発(第4回):仮想注文の保留と状況の保存 Simon Gniadkowski 2011.11.11 12:19 #22 スプレッドは0.25 #ESZ1,M5:スプレッド0.25000000 OK、あなたは...1242.00(Ask)で買いを建てます。 #ESZ1,M5: オープン #13679252 買い1.00 #ESZ1 at 1242.00 ok #ESZ1,M5: 注文 13679252 成功裏にオープン 次に、TPを買値 + 2 * スプレッド、SLを の買値 - 2 * スプレッドで変更しようとします。 #esz1,m5: SL: 1241.25000000 #esz1,m5: tp: 1242.25000000 もしFreezeLevelが0.50なら、それはあなたの問題です...あなたのFreezeLevelは何ですか? Need Help with Error バックテスト/最適化 MQLエキスパートへの質問 William Roeder 2011.11.11 13:26 #23 shinobi: 同じ問題。注文は、stoploss = 0 と takeprofit = 0 でうまく開きます。 しかし、その後OrderModifyは失敗します。 4桁、5桁のブローカーに対応していない。最初に開いてからストップを設定しない。 以前回答した ように Ian Venner 2011.11.12 04:38 #24 そうですね、おそらくECNブローカーで取引されていると思いますが、ゼロストップで注文をオープンし、オープン後に注文を修正しなければならないので、50pipsのSLとTPの問題があります、Raptorが言ったように念のためfreezelevelとstoplevelもチェックしてみてください OrderModify()のコードもチェックしてみてください・・・多分そのように動作すると思いますが、OrderSelect()で 注文を選択してからOrderOpenPrice()を実行した方が良いと思います。 削除済み 2011.11.15 06:54 #25 本当にありがとうございました。 しかし、#130はまだ夜中に私を悩ませています;) 次にやってみたのは、 。 double stoploss = 50; double SL = 0.0; //open position if(long) //take long position result_ticket = OrderSend(Symbol(), 0, 1, MarketInfo(Symbol(), MODE_ASK), 2, 0, 0, "", 12345); else //take short position result_ticket = OrderSend(Symbol(), 1, 1, MarketInfo(Symbol(), MODE_BID), 2, 0, 0, "", 12345); //check for errors if(result_ticket == -1) { Log("error="+GetLastError()); return(-1); } Log("Order "+result_ticket+" Successfully Opened"); //select order if (!OrderSelect(result_ticket, SELECT_BY_TICKET)) { Log("error="+GetLastError()); return(-1); } entry_price = OrderOpenPrice(); //check stoplevel double stoplevel = MarketInfo(Symbol(), MODE_STOPLEVEL); Log("Stoplevel: " + stoplevel); Log("stoploss: " + stoploss); if(stoploss < stoplevel) stoploss = stoplevel + 1; //checl freezelevel double freezelevel = MarketInfo(Symbol(), MODE_FREEZELEVEL); Log("Freezelevel: " + freezelevel); Log("stoploss: " + stoploss); if(stoploss < freezelevel) stoploss = freezelevel + 1; if(long) SL = MarketInfo(Symbol(), MODE_BID) - stoploss * MarketInfo(Symbol(), MODE_POINT); else SL = MarketInfo(Symbol(), MODE_ASK) + stoploss * MarketInfo(Symbol(), MODE_POINT); Log("SL: " + SL*pips2dbl); if(!OrderModify(result_ticket, entry_price, SL* pips2dbl, 0, Red)) { Log("error="+GetLastError()); return(-1); } Log("Stoploss successfully set"); 見ての通り、takeprofitを使わないことで、例を簡略化しました。エラーは間違いなくストップロスによって発生するので、takeprofitは必要ない。 私はまず、ストップロス(とtakeprofit)を0にして注文を出し、後でOrderModifyを使ってストップロスを設定しようとします。 その前にMode_StoplevelとMode_Freezelevelをチェック し、必要ならストップロスを調整します。(ログにあるように、最初はストップロスが50で、Mode_Stoplevelが75なので、ストップロスをMode_Stoplevel+1、つまり76に設定します) RaptorUK と SDC: MarketInfo(MODE_FREEZELEVEL) returns 0. Freezelevel が問題とは思えませんね。 ログファイルに出力を入れてみました。 SDC: 念のため、OrderOpenPrice を呼び出す前に OrderSelect も挿入してみました。ログを見ると、OrderSelectが機能したことがわかります。そうでなければ、コードはここまで進まなかったでしょう(exit -1)。 WHRoederです。 私はSDCのシンプルな例に従いました。しかし、私は、ストップロスを設定する際に、ピップス4/5桁の調整を使用することで、それを拡張しました。また、注文はまずstoplossとtakeprofitをゼロに設定して開き、次にOrderModifyでstoplossを設定していることがわかります。S/LとT/Pをゼロに設定した下のログにあるように、注文は正常に開かれますが、次のステップのOrderModifyでS/Lを設定することができません。 以下は完全なログです: #ESZ1,M5: loaded successfully #ESZ1,M5: Date: 2011/11/15 9:24 #ESZ1,M5: Symbol: #ESZ1 #ESZ1,M5: Depot: 56489.95000000 #ESZ1,M5: Stop Level [Points]: 75.00000000 #ESZ1,M5: Freeze Level [Points]: 0.00000000 #ESZ1,M5: Spread [Points]: 25.00000000 #ESZ1,M5: Min/Max Lot: 0.01000000/1000.00000000 #ESZ1,M5: Point: 0.01000000 #ESZ1,M5: Tick Size: 0.25000000 #ESZ1,M5: Tick Value: 12.50000000 #ESZ1,M5: Digits: 2.00000000 #ESZ1,M5: Contract: 2011.09.14 00:00-2011.12.16 23:59 #ESZ1,M5: Init successfully completed. #ESZ1,M5: initialized #ESZ1,M5: Opening Position #ESZ1,M5: tickvalue: 12.50000000 #ESZ1,M5: Ask/Bid 1250.50000000/1250.25000000 #ESZ1,M5: Spread 0.25000000 #ESZ1,M5: pos size: 1 #ESZ1,M5: open #13697436 sell 1.00 #ESZ1 at 1250.25 ok #ESZ1,M5: Order 13697436 Successfully Opened #ESZ1,M5: Stoplevel: 75.00000000 #ESZ1,M5: stoploss: 50.00000000 #ESZ1,M5: Freezelevel: 0.00000000 #ESZ1,M5: stoploss: 76.00000000 #ESZ1,M5: SL: 12.51260000 #ESZ1,M5: error=130 皆さんの継続的な協力に本当に感謝していますし、問題を絞り込めそうです :) それで、他に何が問題なのでしょうか?他に何か試せることはありますか? shinobi Simon Gniadkowski 2011.11.15 09:01 #26 RaptorUK: スプレッドは0.25 #ESZ1,M5:スプレッド0.25000000 OK、あなたは...1242.00(Ask)で買いを建てます。 #ESZ1,M5: オープン #13679252 買い1.00 #ESZ1 at 1242.00 ok #ESZ1,M5: 注文 13679252 成功裏にオープン そして、TPを買値+2 * Spread、SLを 買値-2 * Spreadに 設定して修正しようとします。 STOP_LEVEL は 3 * Spread ではありませんか? Stop が近すぎます ... ... #ESZ1,M5: Stoplevel: 75.00000000 #ESZ1,M5: stoploss: 50.00000000 削除済み 2011.11.15 11:34 #27 Hey Raptor, ああ、だからここでstoplevelを確認 するんだ(上のコードから): double stoplevel = MarketInfo(Symbol(), MODE_STOPLEVEL); Log("Stoplevel: " + stoplevel); Log("stoploss: " + stoploss); if(stoploss < stoplevel) stoploss = stoplevel + 1; 最後の例では、stoplossは3*Spread +1である76に設定されています。 これは十分な距離でしょう? Simon Gniadkowski 2011.11.15 11:52 #28 shinobi: こんにちは、Raptorです。 そうなんです、だからここでstoplevelをチェックするんです(上のコードから)。 この例では、stoplossは76に設定されていますが、これは3*Spread +1です。 これで十分な距離でしょう? でも、四捨五入の問題があって、SLがSTOP_LEVELから0.25以上離れるように、一番近い0.25(S&P500は0.25ステップで動く)に丸める必要があるんじゃないかと思うんですが・・・・・・・・。 削除済み 2011.11.16 05:53 #29 良いアイデアですが、残念ながらそれも役に立ちませんでした。 私がやったことは次のとおりです。 まず、2倍を最も近い2倍に丸めるカスタム関数を 書きました: double DoubleRound(double number, double step) { double mod = MathMod(number, step); if(mod < step/2.0) step = 0; double rounded = number - mod + step; return (rounded); } これはあなたが期待したとおりの働きをします。DoubleRound(1237.687360000)で呼び出すと、1237.50が返されます。 そして、OrderModifyを呼ぶ直前にS/Lで使ってみました。そして、MODE_TICKVALUEを使いましたが、#ESZ1では0.25です。 つまり、 。 //round to nearest Tickvalue SL = DoubleRound(SL, MarketInfo(Symbol(), MODE_TICKVALUE)); Log("SL: " + SL); if(!OrderModify(result_ticket, entry_price, SL* pips2dbl, 0, Red)) { Log("error="+GetLastError()); return(-1); } ログを見ると、四捨五入はうまくいっていることがわかります。しかし、ストップロスはまだ拒否されました :/ #ESZ1,M5: loaded successfully #ESZ1,M5: Date: 2011/11/16 7:44 #ESZ1,M5: Symbol: #ESZ1 #ESZ1,M5: Depot: 56364.95000000 #ESZ1,M5: Stop Level [Points]: 75.00000000 #ESZ1,M5: Freeze Level [Points]: 0.00000000 #ESZ1,M5: Spread [Points]: 25.00000000 #ESZ1,M5: Min/Max Lot: 0.01000000/1000.00000000 #ESZ1,M5: Point: 0.01000000 #ESZ1,M5: Tick Size: 0.25000000 #ESZ1,M5: Tick Value: 12.50000000 #ESZ1,M5: Digits: 2.00000000 #ESZ1,M5: Contract: 2011.09.14 00:00-2011.12.16 23:59 #ESZ1,M5: Opening Position #ESZ1,M5: Ask/Bid 1240.00000000/1239.75000000 #ESZ1,M5: Spread 0.25000000 #ESZ1,M5: open #13708089 sell 1.00 #ESZ1 at 1239.75 ok #ESZ1,M5: Order 13708089 Successfully Opened #ESZ1,M5: Stoplevel: 75.00000000 #ESZ1,M5: Freezelevel: 0.00000000 #ESZ1,M5: stoploss: 76.00000000 #ESZ1,M5: SL: 1237.50000000 #ESZ1,M5: error=130 他に何が問題なのか想像がつきません!この#130は本当にしつこいです!!! Simon Gniadkowski 2011.11.16 08:46 #30 あなたは、売りを オープンしました #ESZ1,M5: 開く #13708089 sell 1.00 #ESZ1 at 1239.75 ok で、その下に SLを設定しようとした ... ... #ESZ1,M5: SL: 1237.50000000 #ESZ1,M5:エラー=130 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
しかし、その後OrderModifyが失敗します。
以下のコードは、前回の投稿から上のコードの後に実行されています。
Log ist:
#ESZ1,M5:オープニングポジション
#ESZ1,M5: tickvalue: 12.50000000
#ESZ1,M5:ポジションサイズ:1.00000000
#ESZ1,M5:アスク/ビッド 1242.00000000/1241.75000000
#ESZ1,M5:スプレッド 0.25000000
#ESZ1,M5: オープン #13679252 買い1.00 #ESZ1 1242.00でOK
#ESZ1,M5: 注文 13679252 成功裡にオープン
#esz1,m5: sl: 1241.25000000
#ESZ1,M5: TP: 1242.25000000
#ESZ1,M5:エラー=130
というわけで、最初にオープンしてストップロスを設定してもうまくいかないようです :-/。
スプレッドは0.25
#ESZ1,M5:スプレッド0.25000000
OK、あなたは...1242.00(Ask)で買いを建てます。
#ESZ1,M5: オープン #13679252 買い1.00 #ESZ1 at 1242.00 ok
#ESZ1,M5: 注文 13679252 成功裏にオープン
次に、TPを買値 + 2 * スプレッド、SLを の買値 - 2 * スプレッドで変更しようとします。
#esz1,m5: SL: 1241.25000000
#esz1,m5: tp: 1242.25000000
もしFreezeLevelが0.50なら、それはあなたの問題です...あなたのFreezeLevelは何ですか?
同じ問題。注文は、stoploss = 0 と takeprofit = 0 でうまく開きます。
しかし、その後OrderModifyは失敗します。
4桁、5桁のブローカーに対応していない。最初に開いてからストップを設定しない。
以前回答した ように
そうですね、おそらくECNブローカーで取引されていると思いますが、ゼロストップで注文をオープンし、オープン後に注文を修正しなければならないので、50pipsのSLとTPの問題があります、Raptorが言ったように念のためfreezelevelとstoplevelもチェックしてみてください
OrderModify()のコードもチェックしてみてください・・・多分そのように動作すると思いますが、OrderSelect()で 注文を選択してからOrderOpenPrice()を実行した方が良いと思います。
しかし、#130はまだ夜中に私を悩ませています;)
次にやってみたのは、
。
見ての通り、takeprofitを使わないことで、例を簡略化しました。エラーは間違いなくストップロスによって発生するので、takeprofitは必要ない。
私はまず、ストップロス(とtakeprofit)を0にして注文を出し、後でOrderModifyを使ってストップロスを設定しようとします。
その前にMode_StoplevelとMode_Freezelevelをチェック し、必要ならストップロスを調整します。(ログにあるように、最初はストップロスが50で、Mode_Stoplevelが75なので、ストップロスをMode_Stoplevel+1、つまり76に設定します)
RaptorUK と SDC:
MarketInfo(MODE_FREEZELEVEL) returns 0. Freezelevel が問題とは思えませんね。
ログファイルに出力を入れてみました。
SDC:
念のため、OrderOpenPrice を呼び出す前に OrderSelect も挿入してみました。ログを見ると、OrderSelectが機能したことがわかります。そうでなければ、コードはここまで進まなかったでしょう(exit -1)。
WHRoederです。
私はSDCのシンプルな例に従いました。しかし、私は、ストップロスを設定する際に、ピップス4/5桁の調整を使用することで、それを拡張しました。また、注文はまずstoplossとtakeprofitをゼロに設定して開き、次にOrderModifyでstoplossを設定していることがわかります。S/LとT/Pをゼロに設定した下のログにあるように、注文は正常に開かれますが、次のステップのOrderModifyでS/Lを設定することができません。
以下は完全なログです:
皆さんの継続的な協力に本当に感謝していますし、問題を絞り込めそうです :)
それで、他に何が問題なのでしょうか?他に何か試せることはありますか?
shinobi
スプレッドは0.25
#ESZ1,M5:スプレッド0.25000000
OK、あなたは...1242.00(Ask)で買いを建てます。
#ESZ1,M5: オープン #13679252 買い1.00 #ESZ1 at 1242.00 ok
#ESZ1,M5: 注文 13679252 成功裏にオープン
そして、TPを買値+2 * Spread、SLを 買値-2 * Spreadに 設定して修正しようとします。
STOP_LEVEL は 3 * Spread ではありませんか? Stop が近すぎます ... ...
ああ、だからここでstoplevelを確認 するんだ(上のコードから):
最後の例では、stoplossは3*Spread +1である76に設定されています。
これは十分な距離でしょう?
こんにちは、Raptorです。
そうなんです、だからここでstoplevelをチェックするんです(上のコードから)。
この例では、stoplossは76に設定されていますが、これは3*Spread +1です。
これで十分な距離でしょう?
私がやったことは次のとおりです。
まず、2倍を最も近い2倍に丸めるカスタム関数を 書きました:
これはあなたが期待したとおりの働きをします。DoubleRound(1237.687360000)で呼び出すと、1237.50が返されます。
そして、OrderModifyを呼ぶ直前にS/Lで使ってみました。そして、MODE_TICKVALUEを使いましたが、#ESZ1では0.25です。
つまり、
。
ログを見ると、四捨五入はうまくいっていることがわかります。しかし、ストップロスはまだ拒否されました :/
他に何が問題なのか想像がつきません!この#130は本当にしつこいです!!!
あなたは、売りを オープンしました
#ESZ1,M5: 開く #13708089 sell 1.00 #ESZ1 at 1239.75 ok
で、その下に SLを設定しようとした ... ...
#ESZ1,M5: SL: 1237.50000000
#ESZ1,M5:エラー=130