int CloseOrder(int ticket, double lots)
{
int err,i1;
double price;
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
if (lots<MarketInfo(Symbol(),MODE_MINLOT))lots=MarketInfo(Symbol(),MODE_MINLOT);
while(i1<10)
{
RefreshRates();
if (OrderType()==0)price=Bid;
if (OrderType()==1)price=Ask;
if (OrderType()>1){OrderDelete(ticket);return(0);}
OrderClose(ticket,lots,NormalizeDouble(price,Digits),Slippage,Goldenrod);
err = GetLastError();
if (err == 0) break;
Print(WindowExpertName(),Symbol(),Error(err)," при закрытии ордера");
Sleep(100);
i1++;
}
return(0);
}
すでに注文修正コードを書き直したのですが、エラーは残ったままです。
私は、このエラーはログからではないことを強調します。
テストを実行中にResultsでエラーを発見しました。
例:
価格1.4654で買いポジション(注文番号1)を建てました
次に結果で修正(注文番号1)価格1.4654とTakeProfit 1.4752
次に結果で閉鎖(注文番号1)価格1.4704とTakeProfit 1.4752
利益 = 50.00
損切りポジション例ですがストップロスは設定していないので TakeProfitのみで閉鎖すべきですが、損切りのポジションと言えます。
私は1.4820
で買いポジション(注文番号271)をオープンし、結果には修正(注文番号271)価格1.4820とTakeProfit 1.4918
と書いてあり、結果にはクローズ(注文番号1)価格1.4737とTakeProfit 1.4918
利益 = - 83.46
と書いてある。
TakeProfitを100にしたのはどこでも同じです。
StopLossを設定しなかった。
どう直せばいいのかわからない。
このEAコードをコンパイルすると=エラー0件、警告0件。
このコードを使って、Modify Ordersを行いました。
エラーの場所を教えてください。
すでに注文修正コードを書き直したのですが、エラーは残ったままです。
私は、このエラーがログからのものではないことを強調します。
テスト中にResultsでエラーを発見しました。
例
1.4654で買いポジション(注文番号1)を建てました。
次に、Resultsにmodify (order number 1) price 1.4654 and TakeProfit 1.4752と書かれています。
次にResultsにclose(注文番号1) price 1.4704, TakeProfit 1.4752と書かれています。
利益=50.00
ストップロスを設定していないため、テイクプロフィットのみで決済する必要があるが、負けポジションの例。
1.4820で買いポジション(注文番号271)を建てました。
次にResultsにmodify(注文番号271) price 1.4820 and TakeProfit 1.4918と書かれています。
次に、結果にクローズ(注文番号1)価格1.4737、TakeProfit1.4918と書いてあります。
利益=-83.46
TakeProfitはどこでも100に設定しました。
StopLossを設定しなかった。
どう直せばいいのかわからない。
このEAコードをコンパイルすると=エラー0件、警告0件。
このコードを使って、Modify Ordersを行いました。
の値を探すのを手伝ってください。
1 過去 X=5 日 間の最大日次変動率(日次高値-日次安値 ).
2 過去 X=130日間の日次平均変動率
3 また、これらの値は、最大日次 変動 率がA=75~ B=150の 範囲にある場合、どのように条件に書き込むことができるのか- 平均日次変動率
1.まず、ウィンドウ(https://docs.mql4.com/ru/windows/WindowBarsPerChart)に必要なバーの本数を調べます。
2.そうすると、最初のバーhttps://docs.mql4.com/ru/windows/WindowFirstVisibleBar の日付が表示されます。
3.この最初のバーとバーの数を知っている - これらのバーを通過し、それらの間の高値と安値を決定します。
4. 利益
バリアント2
https://docs.mql4.com/ru/windows/WindowPriceMaxтво
https://docs.mql4.com/ru/windows/WindowPriceMinВторой バリアント
最初の選択肢に傾きましたが、ウィンドウ内のバーの数をどう計算すればいいのかわかりませんでした。 2番目の選択肢はもっと饒舌です。
しかし、どのように前のバーの最後の最大値と最小値を "キャッチ "するのですか? 事前にありがとうございます
しかし、前のバーの最後の最大値と最小値を「キャッチ」するにはどうすればよいのでしょうか?
現在のバーで到達した最大値と最小値を記憶しておけばよく、新しいバーが現れて 前のバーとなったときに、記憶した変数から最大値と最小値を取ることになります。
現在のバーで到達した最大値と最小値を記憶しておけばよく、新しいバーが現れて前のバーとなったときに、記憶した変数から最大値と最小値を取ることになります。
zet変数をstaticとして宣言するか、グローバルゾーンに宣言します。
新しい値を割り当てる前に、新しいバーを 確認し、その値と現在の値との差を確認し、新しい値を割り当てる。
テスターでトレードのクローズがリストアップされたように書かれている場合、orderclose関数の結果である可能性が高いです(TPやSLは 関係ありません)。
ありがとうございます。でも、コードに間違いはないようです。
が、EAにはもう一つコードがあります。