....
err=OrderModify(OrderTicket(), OrderOpenPrice(),New_Stop( NormalizeDouble(OrderOpenPrice()+spred*point,
digits)), OrderProfit(), 0, clrNONE);// Цена открытия плюс спред может быть в зоне заморозки.
.....
.....
double New_Stop(double Parametr) // Проверка стоп-прик.
{
double Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Миним. дистанцияif(Parametr<Min_Dist) // Если меньше допуст.
{
Parametr=Min_Dist; // Установим допуст.Alert("Increased the distance of a stop order or the opening price of pending orders.");
}
return(Parametr); // Возврат значения
}
if (OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE) とする。
if (OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE) とする。
このコードはOnInitではなく、OnTick()に記述する必要があります。
いいえ、できません。
説明できない......テンプレートの仕組みこのようなものです。このような関数を呼び出すまで、コンパイラはその存在について何も知りません(しばしば、呼び出しがなければコンパイラのエラーさえ発生しません)。
そして、そのようなテンプレート関数を呼び出すと、コンパイラは必要な型を埋めてから、すべてが正しく動作することをチェックします。
そして、別の種類のパラメータを指定してテンプレートを呼び出すと、コンパイラは新しい関数、つまりもうひとつの関数を作成します。
ふー、そういうことか )))
UPDです。
ができますが、テンプレートの型が一致していれば、以下の例では正しく動作します。
ありがとうございます、ドキュメントよりもさらに明確です)テンプレートで変数を事前定義 すると、変数を指定しないことができないことがわかりました。ファイルへの印刷に必要です。ログには、レコードを分割するオプションはありません。ログが5本あればいいのですが...)。その結果、テンプレートでは、変数のタイプを希望するものに持っていかないオプションがあり、それはテンプレート関数内で行うことができますが、変数の数を完全に指定する必要があります。また、必要な型の変数があらかじめ定義されている単純な関数は、呼び出し時に指定する変数の数を少なくする機会を与えますが、変数の型は必要なものに持っていく必要があります。もちろん、呼び出し時に行うことも可能ですが、記録が長くなりすぎてしまいます。
皆さん、こんにちは。
ストップロスを変更する関数を作りました。しかし、それが動作すると、EURUSD,H1: OrderModify error 130と表示されます。
そして、その価格はストップロスを設定すべき場所からは程遠い。
以下はその機能です。
この方法で試してみてください。
ありがとうございます!うまくいきました。
しかし、もう2つのニュアンスがあります。
1 当週の金曜日と前週の金曜日にそれぞれオープンした注文をクローズしない条件を追加するにはどうすればよいですか?
2.コードの修正方法 - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
という 警告を 消すには?MarketInfo(nameSym,MODE_DIGITS)..." と表示される。
アドバイスをお願いします。
テスターでは、GetAmountLotFromOpenPosロットサミング関数の戻り値は-1717986918となります。
その理由がわかりました。OrderProft()の代わりにOrderTakeProfit()をOrderModifyに入れればよかったです。少し目を通しました。
とにかくありがとうございました。
ありがとうございます!うまくいきました。
しかし、もう2つのニュアンスがあります。
1 どのような条件を追加する当週の金曜日、および前の週の金曜日に開かれた注文を閉じないために、それぞれ、閉鎖されましたか?
2.コードの修正方法 - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
という 警告を 消すには?MarketInfo(nameSym,MODE_DIGITS)..." のことなのでしょう。
最初の質問では、この関数を作る必要があります。
{Print("Error when order select ", GetLastError();})注文時にエラーが発生しました。
2問目には、次のような項目があるはずです。
OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(MarketInfo(nameSym,MODE_ASK)), 3, clrNONE)です。
頑張ってください。