for (int i = 0; i<=OrdersTotal(); i++) { if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){//Нефига тут профиту делать, это так, для убыстрения....
if(OrderProfit()>= NormalizeDouble (TP*Point,Digits)) //А тут вообще непонятки что с чем сравниваете.... { if (OrderType() == OP_BUY) double Lots = OrderLots(); double HalfLot = NormalizeDouble (Lots*0.5,2);// Тут озаботится чтобы лот не стал меньше минимального OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
externint TP = 200; // это количество пунктов после которых должно произойти частичное закрытиеexternint Magic = 77;
void CloseHalfOrder(){
for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits))
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2); // изначально ( при открытии ордера) лот рассчитывается так, что он не может быть меньше чем 0,02OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}
}
for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits))
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}
}
あ、あとこの機能を1回の注文につき1回だけ使えるようにするにはどうしたらいいですか?
この関数のエラーの修正をお願いします。もう、全部の汁を搾り取られてしまった。関数の本質は、それが一定の利益に達したときに、関数は、注文の半分を閉じる必要があります。
あ、あとこの機能を1回の注文につき1回だけ使えるようにするにはどうしたらいいですか?
この関数のエラーの修正をお願いします。もう、全部の汁を搾り取られてしまった。関数の本質は、それが一定の利益に達したときに、関数は、注文の半分を閉じる必要があります。
void CloseHalfOrder(){
for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){//Нефига тут профиту делать, это так, для убыстрения....
if(OrderProfit()>= NormalizeDouble (TP*Point,Digits)) //А тут вообще непонятки что с чем сравниваете....
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);// Тут озаботится чтобы лот не стал меньше минимального
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}
}
}
あ、あとこの機能を1回の注文につき1回だけ使えるようにするにはどうしたらいいですか?
一部クローズドオーダーの原理はこちらで 確認できます。
ありがとうございます。でも、やはりまずは自分の失敗を理解することが先決です。まだまだ勉強中です。それに、私は真実に近いと思います。
もう一回機能が動作しない。エラーを理解したい。+ 1つの新規注文に対して1回だけトリガーさせる方法は?ありがとうございました。)
もう一回機能が動作しない。エラーを理解したい。+ 1つの新規注文に対して1回だけトリガーさせる方法は?
注文の際の条件がよくわからない。まあ、ここではグローバル変 数を使うしかないでしょう。もしかして、注文は複数あって、それぞれ1回だけ?
もう一回機能が動作しない。エラーを理解したい。+ 1つの新規注文に対して1回だけトリガーさせる方法は?
私は次のような状況です。EAには複数のモジュールがあり、各モジュールはいくつかのカスタム関数を受け取ります。コードに溺れないために、各モジュールをスクリプトにまとめることにしました。Expert Advisorからスクリプトを呼び出すバリエーションは以下の 通りです。しかし、次の問題が発生した。スクリプトを呼び出すときに、いくつかのパラメータを渡す必要があるのだ。グローバル変数を使うことができる。他にどのようなバリエーションが考えられますか?
iCustom()を使った「よりシンプルな」方法は、2つの理由で私には合いません。まず、モジュールの呼び出しは、定数ではなく、メモリ上で時々行われる必要があります。次に、インジケータ・アレイを使用しない。
注文の際の条件がよくわからない。ここではグローバル変数を使用する必要があります。複数の注文があり、それぞれ1回しかできないのでしょうか?
マーケットでの注文は1つだけです。現在、この機能は全く動作していません...なぜか。ただ、ちゃんと動くのであれば、設定したpips以上の利益が出ていれば、ずっとトリガーされるのは理解できます。もちろん、1回でポジションの半分を決済してくれればいいんです。でも、一度くらいはうまくいってほしいものです(笑)。
私は次のような状況です。EAには複数のモジュールがあり、各モジュールはいくつかのカスタム関数を受け取ります。コードに溺れないために、各モジュールをスクリプトにまとめることにしました。Expert Advisorからスクリプトを呼び出すバリエーションは以下の 通りです。しかし、次の問題が発生した。スクリプトを呼び出すときに、いくつかのパラメータを渡す必要があるのだ。グローバル変数を使うことができる。他にどのようなバリエーションが 考えられますか?
iCustom()を使った「よりシンプルな」方法は、2つの理由で私には合いません。まず、モジュールの呼び出しは、定数ではなく、メモリ上で時々行われる必要があります。次に、インジケータ・アレイを使用しない。
図書館も選択肢の一つです。