どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 351

 
この関数のエラーの修正をお願いします。もう、全部の汁を搾り取られてしまった。関数の本質は、それが一定の利益に達したときに、関数は、注文の半分を閉じる必要があります。
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);
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回だけ使えるようにするにはどうしたらいいですか?
 
Trader7777:
この関数のエラーの修正をお願いします。もう、全部の汁を搾り取られてしまった。関数の本質は、それが一定の利益に達したときに、関数は、注文の半分を閉じる必要があります。
あ、あとこの機能を1回の注文につき1回だけ使えるようにするにはどうしたらいいですか?
パーシャルクロージングの原理はこちらで ご確認ください。
 
Trader7777:
この関数のエラーの修正をお願いします。もう、全部の汁を搾り取られてしまった。関数の本質は、それが一定の利益に達したときに、関数は、注文の半分を閉じる必要があります。

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回だけ使えるようにするにはどうしたらいいですか?
 
TarasBY:
一部クローズドオーダーの原理はこちらで 確認できます。

ありがとうございます。でも、やはりまずは自分の失敗を理解することが先決です。まだまだ勉強中です。それに、私は真実に近いと思います。

 

もう一回機能が動作しない。エラーを理解したい。+ 1つの新規注文に対して1回だけトリガーさせる方法は?ありがとうございました。)

extern int TP         = 200; // это количество пунктов после которых должно произойти частичное закрытие
extern int 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,02
            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);
          }
        }
      }
    }
 
Trader7777:

もう一回機能が動作しない。エラーを理解したい。+ 1つの新規注文に対して1回だけトリガーさせる方法は?


注文の際の条件がよくわからない。まあ、ここではグローバル変 数を使うしかないでしょう。もしかして、注文は複数あって、それぞれ1回だけ?
 
Trader7777:

もう一回機能が動作しない。エラーを理解したい。+ 1つの新規注文に対して1回だけトリガーさせる方法は?

ロットサイズによる絞り込み
 

私は次のような状況です。EAには複数のモジュールがあり、各モジュールはいくつかのカスタム関数を受け取ります。コードに溺れないために、各モジュールをスクリプトにまとめることにしました。Expert Advisorからスクリプトを呼び出すバリエーションは以下の 通りです。しかし、次の問題が発生した。スクリプトを呼び出すときに、いくつかのパラメータを渡す必要があるのだ。グローバル変数を使うことができる。他にどのようなバリエーションが考えられますか?

iCustom()を使った「よりシンプルな」方法は、2つの理由で私には合いません。まず、モジュールの呼び出しは、定数ではなく、メモリ上で時々行われる必要があります。次に、インジケータ・アレイを使用しない。

 
Sepulca:

注文の際の条件がよくわからない。ここではグローバル変数を使用する必要があります。複数の注文があり、それぞれ1回しかできないのでしょうか?

マーケットでの注文は1つだけです。現在、この機能は全く動作していません...なぜか。ただ、ちゃんと動くのであれば、設定したpips以上の利益が出ていれば、ずっとトリガーされるのは理解できます。もちろん、1回でポジションの半分を決済してくれればいいんです。でも、一度くらいはうまくいってほしいものです(笑)。
 
gyfto:

私は次のような状況です。EAには複数のモジュールがあり、各モジュールはいくつかのカスタム関数を受け取ります。コードに溺れないために、各モジュールをスクリプトにまとめることにしました。Expert Advisorからスクリプトを呼び出すバリエーションは以下の 通りです。しかし、次の問題が発生した。スクリプトを呼び出すときに、いくつかのパラメータを渡す必要があるのだ。グローバル変数を使うことができる。他にどのようなバリエーションが 考えられますか?

iCustom()を使った「よりシンプルな」方法は、2つの理由で私には合いません。まず、モジュールの呼び出しは、定数ではなく、メモリ上で時々行われる必要があります。次に、インジケータ・アレイを使用しない。


図書館も選択肢の一つです。