そして、それを「漫画」にしよう(多通貨化) - ページ 7

 
Swan >> :

でした。

StopLossがtrueのとき、新しい値が割り当てられます。

そうでない場合は、注文が変更されます。

を、「エラーにならないが、クロスを脱ぐかズボンを履くかしないといけない」)。

すぐには分からなかった))...状態だとストップがかからないかも!?

他のを外すべきかな?論理は苦にならないようだ...。1つの条件だけで十分なのに、なぜ2つ目の条件が必要なのですか?

StopLoss=MathMin( s0, s1);//Функция возвращает минимальное из двух числовых значений
if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=MathMax( s0, s1);
OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);

それとも...

if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=MathMax( s0, s1);
if( StopLoss-Ask> StopLevel-0.5*Point) StopLoss=MathMin( s0, s1);
OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);


スワン>>:

実数の比較をご覧ください。

読ませていただきます・・・。では、絶対に必要なのでしょうか?やったことがないだけです)。

 
ALex2008 >> :

すぐには理解できなかった...。この状態では停止しないかもしれない!

他を削除することはできないのでしょうか?論理は苦にならないようだ...。

たぶん)4hのローソクは通常StopLevelより大きい....


ALex2008>>:

読んでみようかな・・・。というか、本当に必要なのか?ただ、そういう風にしたことがないだけです)

値がほぼ等しいと、いろいろとおかしなことが起こる)

二重型の数値が等しいかどうかをチェックするとき - 必須。


 StopLoss-Ask< StopLevel-0.5*Point

ロシア語:StopLossからAskを引いた値がStopLevelより0.5*ポイントの精度で小さいこと。

(StopLoss,Ask,StopLevelは正規化されています)

 
StopLoss=MathMin( s0, s1);//Функция возвращает минимальное из двух числовых значений
if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=MathMax( s0, s1);
//StopLoss может присвоиться новое значение, желательно и его проверить на StopLevel
OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
ちょっと面倒ですが、考えてみてください(笑)。
 

では、このオプションはどうでしょうか。持っておくのが合理的だと思うのですが・・・。

if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=MathMax( s0, s1);
if( StopLoss-Ask> StopLevel-0.5*Point) StopLoss=MathMin( s0, s1);
OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);

また、取引コンテキストを確認する必要があります。そうしないと、取引コンテキストがビジー状態であるとのエラーが発生します。EAのコピーがたくさんある場合、すべてのEAが同時に 自分のシンボルの現在の注文を閉じて、新しい注文を設定することが判明しました...。渋滞ができる)

ということなのでしょうが...。

//-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
void UpTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)){
         Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
         if(IsTradeAllowed()){
            DellAllOrders();
            if(Ask< Enter- StopLevel+0.5*Point){
               OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Enter+ Profit, 0, 0,0, Green);}
         else Sleep(1000);
         }
      }
  }
void DownTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) >= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) < 0)){
         Enter=iLow(NULL,PERIOD_H4,1)-10*Point;
         if(IsTradeAllowed()){
            DellAllOrders();
            if(Bid> Enter+ StopLevel-0.5*Point){
               OrderSend(Symbol(), OP_SELLSTOP, 0.1, Enter, 0, 0, Enter- Profit, 0, 0,0, Green);}
         else Sleep(1000);
         }
      }
  }

I.e.現在の注文を閉じて、新しい保留中の注文を設定する前に、取引の流れを確認する...ビジー状態の場合は、1秒間のポーズをとります。

 
ALex2008 >> :

では、このオプションはどうでしょうか。このままにしておくのが賢明なようだ...。

if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=MathMax( s0, s1);
if( StopLoss-Ask> StopLevel-0.5*Point) StopLoss=MathMin( s0, s1);
OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);

なーんだ、そういうことだったんだ。決めておかなければならない)

の3つのオプションがあります。

            StopLoss=MathMin( s0, s1);//Функция возвращает минимальное из двух числовых значений
            if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=MathMax( s0, s1);
            if( StopLoss-Ask> StopLevel-0.5*Point)
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);

            StopLoss=MathMin( s0, s1);//Функция возвращает минимальное из двух числовых значений
            if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=Ask+ StopLevel;//+x*Point
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);

            StopLoss=MathMin( s0, s1);//Функция возвращает минимальное из двух числовых значений
            if( StopLoss-Ask> StopLevel-0.5*Point)
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);

ALex2008 さんが書き込みました>>1

あと、トレードスレッドも確認しないと、忙しいというエラーが出るかも・・・。なぜなら、たくさんのチャートがあると、すべて同時に現在の注文を閉じてしまうからです...。
int start() {
   if(!IsTradeAllowed()) return(0);

それでもだめなら、OrderSend, OrderModify, OrderClose, OrderDelete の前に IsTradeContextBusy() をチェックする。


ALex2008 >>:
正しく配置する場所だけだと思うのですが...。例えば、スレッドが混雑しているから古い注文は削除されないが、プログラムは新しい注文を置かなければならない...そして、プログラムは古い注文がすべて削除されたときにのみ新しい注文を置かなければならない、というようなことです。

関数UpTrend()、DownTrend()のチェック条件で、注文を削除したり、入れたりすることが簡単に書き直せます。

千差万別)

 
Swan >> :

いや、そういうものなんです。>> 自分の心を決めないとね(笑)

出ないのか、出るのか、出ないのか(笑)

 
ALex2008 >> :

よくわからないのですが、うまくいくのでしょうか、いかないのでしょうか))

* うまくいきません。

最後のバリエーションで。

         if( Type==0){
            if(Bid- StopLoss< StopLevel-0.5*Point) StopLoss=MathMin( b0, b1); 
            if(Bid- StopLoss> StopLevel-0.5*Point) StopLoss=MathMax( b0, b1);
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);

最初の if() で StopLoss が定義されていない。

 
Swan >> :

*not gonna happen.

最後のバリエーションで。

最初の if() で StopLoss が定義されていない。


で、何なんだ?

最初の場合、ストップはローソク足2本分の最低(価格)安を取ります。

StopLoss=MathMin(b0,b1); 

ストップが2本のローソク足の最大(価格)安を受け取った場合、つまり注文に近い場合、2番目の


StopLoss=MathMax(b0,b1);
 
ALex2008 >> :
         if( Type==0){
//здесь StopLoss нипанятно какой)
            if(Bid- StopLoss< StopLevel-0.5*Point) StopLoss=MathMin( b0, b1); 
            if(Bid- StopLoss> StopLevel-0.5*Point) StopLoss=MathMax( b0, b1);
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
 

//здесь StopLoss нипанятно какой)

具体的に何が不明なのでしょうか? 機能入力時は0です。何か理解できていないのかもしれませんが...。


上記で、「注文がオープンで、かつストップ=0の場合、ストップを置く」という条件があります。

if ((Type<=1)&&(Stop==0))SetStop();

と、停止を設定する機能そのもの


//-------Вычисление стопа и установка
void SetStop(){
      RefreshRates();
      b0=iLow(NULL,PERIOD_H4,0)-10*Point;
      b1=iLow(NULL,PERIOD_H4,1)-10*Point;
      s0=iHigh(NULL,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      s1=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
            
         if( Type==0){
            if(Bid- StopLoss< StopLevel-0.5*Point) StopLoss=MathMin( b0, b1); 
            if(Bid- StopLoss> StopLevel-0.5*Point) StopLoss=MathMax( b0, b1);
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
         if( Type==1){
            if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=MathMax( s0, s1);
            if( StopLoss-Ask> StopLevel-0.5*Point) StopLoss=MathMin( s0, s1);
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
   }