MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1830

 
Tretyakov Rostyslav # :

당연하게도. 감사하다.

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

감사하다! 이 문제가 사라졌습니다. 작은 흔적을 남겼습니다. 모든 주문이 마감될 때마다(항상 모든 것이 필수입니다!) 하지만 가끔 3~4개의 주문을 열면 2~1개만 마감될 수 있습니다.이렇게 마감이 발생합니다. 특별한 i번째 수표가 가치가 있는 것처럼 말해줄 수 있습니까?

대괄호를 무시하지 말고 이것을 시도하십시오

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 # :
스크립트가 없나요?
아니다
 
모두들 안녕. 누군가가 고문 편집을 도울 수 있습니까? 어드바이저가 주문 자체를 개설하지 않고 수동으로 개설된 주문에 대해서만 작동하도록 주문 개설 기능을 제거해야 합니다. 미리 감사드립니다.
파일:
 
Vladimir Baskakov # :
스크립트가 없나요?

우리는 지그재그를 취하고 일반적으로 0보다 큰 값에 대해 OnCalculace의 버퍼를 확인합니다(즉, 버퍼에 낮거나 높은 극한 값이 포함됨). 버퍼를 통한 루핑

 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 방향으로만 이동해야 합니다.