MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1830

 
Tretyakov Rostyslav #:

なるほど、ありがとうございます。

 
Порт-моне тв #:

1つだけ気になることがあります。 すべての注文が時々終了するのですが(つまり、すべて、常に!)、時々、3-4個の注文を出すと、そのうちの2個または1個だけが終了することがあるのです。専用のi-checkがあるので、もしかしたら手がかりがあるかもしれません。

ブラケットを軽視しないでください、これを試してください

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {
   int pos=OrdersTotal()-1;
   for(int i=pos; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Bid, 0, NULL))
              {
               Print("Order Close");
              }
           }
        }
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSellPositions2()
  {
   int pos=OrdersTotal()-1;
   for(int i=pos; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Ask, 0, NULL))
              {
               Print("Order Close");
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
D'フォーマットでZZの極値を取得する方法 2021.01.05
数年にわたり?
 
Vladimir Baskakov #:
D'フォーマットでZZの極値を取得する方法 2021.01.05
数年後?
if(ZZ[i]!=EMPTY_VALUE) string iDate=TimeToString(time[i],TIME_DATE|TIME_MINUTES);
 
Tretyakov Rostyslav #:
台本がない?
 
Vladimir Baskakov #:
台本がない?
いいえ
 
皆さん、こんにちは。どなたかEAを編集するのを手伝っていただけませんか?注文開始機能を削除して、EAが自分で注文を開くのではなく、手動で開いた注文でのみ動作するようにする必要があります。ありがとうございました。
ファイル:
 
Vladimir Baskakov #:
台本がない?

ジグザグを取り、OnCalculaceでそのバッファに通常0より大きい値があるかどうかをチェックします(バッファに極値、低値または高値の値が格納されていることを意味します)。を使用してバッファをループしています。

int OnCalculate( const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[]         // Spread 
) {
 // код зиг-зага
 ...
 if (prev_calculated > 0) // дальнейший код сработает только один раз
   return (rates_total);
 // обработка значений зиг-зага
 for (int i = rates_total - 1; i >= 0; i--) {
   if (zigZag[i] > 0) { // найден экстремум
     // сохраняем time[i] в любую удобную форму для дальнейшей работы
   }
 }
 return (rates_total);
}

上のループ(右から左)は、MQL5用です。

MQL4の場合、ループは左から右になります。

for (int i = 0; i < rates_total; i++)

上記の例では、まず新しい時間値を与えています。先に時間的に上位の値を取得するには、ArraySetAsSeriesを使用するか、ループの向きを逆にします。

データは、iCustom、CopyTime、iTime、およびiBars(rates_totalの代わり)を使用してスクリプトから取得することができます。

 
Tretyakov Rostyslav #:

何か勘違いしているようだ。

で関数を切り替えると

void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.
   
// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     } 
       DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
       DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2)));
       TrailingOrders();
  }

すると、ストップとテイクアウトは瞬時に無限にずれる

TrailingOrders();を使用しない場合は、何もシフト しません。

私の仕事は、トレーリングムーブを作ることではなく、ストップとテイクアウトを1回/2回動かすことでした。

今日は一日中「発明」をしていたのですが、今のところ何も動いていません。

 
законопослушный гражданин #:

何か勘違いしているようだ。

で関数を切り替えると

すると、ストップとテイクアウトは瞬時に無限にずれる

TrailingOrders();を使用しない場合は、何もシフト しません。

私の仕事は、トレーリングムーブを作ることではなく、ストップとテイクアウトを1回/2回動かすことでした。

一日中「工夫」しているのですが、今のところ何もうまくいきません。

トレーリングストップは、価格がTPの方向に動いた場合に機能し、価格がロールバックした場合には何もしないようにします。SLレベルはTPの方向にのみ進み、ロールバックしてはいけません。