bool Trade (int signal)
{
int total = OrdersTotal() - 1;
FindOrders();
if(signal == SIGNAL_BUY) // Если сигнал на покупку и открытых ордеров нет..if(!OpenBuy()) // открываем лимитный ордер на покупкуreturn(false);
if(signal == SIGNAL_SELL) // Если сигнал на продажу и открытых ордеров нет..if(!OpenSell())
return(false); // открываем лимитный ордер на продажуif(OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
{
if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
OrdersModifying(); // Модифицируем ордер, добавим SL и TP
}
// if(UseBU == true)// MovingStopLossToBU(); // Перевод в б.у. по достижению некоторого значения TPreturn(true);
}
それはありますね。これが修正方法です。
そして、修正機能はこちら。
Strange でも、また出力にストップ&テイクがないんです。
OrderSelect(g_ticket,SELECT_BY_TICKET) 行の前 if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
History、History_Draw - これらはテスト中にExpert Advisorのように動作します。
与えられたパラメータによる履歴の補正を見るには、以下のようなものが必要です。
歴史に、それともチャートに?もし「はい」なら、どのようなデータをチャートウィンドウで、別ウィンドウで、表として、異なる色のローソク 足で、または動きの始まりと終わりを結ぶ線で表示したいですか?
OrderSelect(g_ticket,SELECT_BY_TICKET) 行の前 if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
それが、私の仕事です。
ストップ高やテイクオーバーはありません。ログには、ストップがおかしいとエラー130と 書かれています。その理由がわからない。
それが、私の仕事です。
ストップ高やテイクオーバーはありません。ログには、ストップがおかしいとエラー130と書かれています。理由がわからない。
ifを使わず、OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES);とすれば、OrdersModifying()に残しておくことができます。
//+------------------------------------------------------------------+
void OrdersModifying()
{
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES);
if(g_type == OP_BUY)
{
if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits); // ストップロス入力パラメータが0でないとき。
//選択された注文の ストップロスの値を取得します。
if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits); // TakeProfit入力パラメータが0に等しくない場合...
// 選択された注文のTakeProfitの値を取得します。
}
if(g_type == OP_SELL)
{
if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits); // ストップロスの入力パラメータが0でないとき。
// 選択された注文のストップロスの値を取得します。
if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits); // TakeProfit入力パラメータが0に等しくない場合...
// 選択された注文のTakeProfitの値を取得します。
}
if(sl != 0 || tp !)= 0)// 得られたslとtpの値が0に等しくない場合。.
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime); // 注文を修正する。
}
}
Symbol() MT4で問題が発生しました。
2つの機能で説明します。
を実行すると、空文字列が出力されます。
しかし、2番目の関数は、文字列ID "EURUSD "を出力します(まあ、チャートに依存しますが、関数のロジックによると、それは空の文字列になるはずですが、出力されます)。
何が問題なのか理解するのを助けてください。ありがとうございました。
変数の宣言時に予約名(value)を使用することはできず、_valueと呼びます。
それが、私の仕事です。
ストップ高やテイクオーバーはありません。ログにはエラー130とあり、ストップがおかしいと書いてある。理由がわからない。
そして、彼らはそうしない!
Vitaly さん、言われたとおりやってみましたが、何も変わりませんね。どうやらバグはどこかに埋まっているようです。
以前はすべて(新規注文-設定した価格レベルに達したときに変更し、B.W.に転送)、すべてうまくいっていました。こんな感じでしたね。
今は、すべてを特定の専門的な機能に分解したため、すべてがすこぶるうまくいかなくなったのです。両方の方法を試しましたが、何もうまくいきません。ストップが設定されません。
そして、彼らはそうしない!
どこが論理的なんだ?理解したい...以下はその機能です。
入力変数i_slと i_tpが 0に等しくない場合、すでにオーダーにあるであろうストップとテイクの価格、つまりslとtpを 取得することができます。その後、ここでSLとTPを 計算したかどうか確認します(ショートの場合)。
もし値が得られたら、その値はゼロにはならない...なぜなら、値が変わってしまうからだ!これらは、コードコンテキストによって逐次取得する変数です。
そして、ここで、stopとtakeの値が見つかったかどうかを確認しました。これだけ条件が揃っていて、どうしてゼロなんだ?
まず最初にロジックを構築し、次に関数やファイルなどを行う。
なぜ左手を右耳の後ろで掻くのか!
私の関数は、パラメータ宣言から始まりますが、Kimさんのものをご覧ください