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

 
Galim_V :

작업은 최소한의 마감이 있는 막대를 찾는 것입니다.

for(int x=0; x<=xBars -1; x++)

{

카운터++;

// Print(닫기[x],",,,",카운터);

정수 h = ArrayMinimum(닫기[x]);

if(카운터 > 20) 중단;

}

컴파일러는 닫기에서 맹세합니다.

별도의 배열에 종가 를 작성한 다음 ArrauMin 루프 외부에 작성하십시오.
 
Alekseu Fedotov :
별도의 배열에 종가 를 작성한 다음 ArrauMin 루프 외부에 작성하십시오.
덕분에!
 
Galim_V :

작업은 최소한의 마감이 있는 막대를 찾는 것입니다.

iHighest 및 iLowest 기능이 있습니다(현재 MT5에도 있음).

 
Taras Slobodyanik :

iHighest 및 iLowest 기능이 있습니다(현재 MT5에도 있음).

고맙습니다!
 
Galim_V :

작업은 최소한의 마감이 있는 막대를 찾는 것입니다.

for(int x=0; x<=xBars -1; x++)

{

카운터++;

// Print(닫기[x],",,,",카운터);

정수 h = ArrayMinimum(닫기[x]);

if(카운터 > 20) 중단;

}

컴파일러는 닫기에서 맹세합니다.

MQL4에서 최소/최대 가격 을 찾는 작업은 한 줄로 해결됩니다.

 double fMinClose = iClose ( NULL , 0 , iLowest ( NULL , 0 , MODE_CLOSE , <сколько баров>, <начинать с бара>));
 
Taras Slobodyanik :

가능하지만 타이머가 아닙니다.

고맙습니다.

증분으로 많은 양을 계산하는 방법은 무엇입니까? 예금=1000, lot=0.1이면 예금은 2000 lot=0.2가 됩니다. 즉, 창고가 1500이나 1700이면 로트가 증가하지 않습니다.

 
PolarSeaman :

고맙습니다.

로트의 볼륨을 증분으로 계산하는 방법은 무엇입니까? 예금 = 1000, 로트 = 0.1이면 보증금은 2000 로트 = 0.2가 됩니다. 즉, 디포가 1500이나 1700이면 로트가 증가하지 않습니다.

 double percentLot = 0.01 ,
       lot = NormalizeDouble ( MathFloor ( AccountInfoDouble ( ACCOUNT_BALANCE )*percentLot/ 10 )/ 10 , 1);

이 같은...

 
Konstantin Nikitin :

이 같은...

아니요, 창고가 1100이면 로트는 0.11이 됩니다. 하지만 2000까지 증가하지 않으려면 로트가 필요합니다. 설정에서 단계 = 1000을 어떻게 설정합니까?

 
좋은 오후입니다. 색인에 마우스 좌표를 추가할 수 있는지 알려주세요. 가능하면 이 작업을 수행할 수 있는 사람에게 메일을 보내주세요. ereminmikola@yandex.ru
 

안녕하세요 프로그래머입니다. 다음 조건에 올바르게 접근하는 방법을 알려주시겠습니까?

1. EA는 설정에 지정된 동일한 로트로 2개의 시장 주문(구매 및 판매)을 엽니다. - 항목이 비고 없이 실행됨

다음 문제에서 문제가 발생하여 가격이 SELL과 BUY 모두로 이동할 수 있습니다. n 포인트를 전달할 때 어드바이저가 LIVE에서 이 두 거래의 수익성을 스캔하고 n 포인트를 통과한 후 잔액이 마이너스인 주문을 정확히 마감하도록 코드를 구성할 수 있습니까? 아름답게 만드는 방법에 대한 다른 아이디어가 있으면 알려주십시오.

나는 코드를 제공합니다 - 초안, 첫 번째 포인트만 실행되고 TP 및 SL로 2개의 거래가 열립니다.

2. 가격이 설정에 지정된 포인트 수를 초과하면 잔액이 음수인 주문이 마감되고 동일한 로트로 2개의 추가 주문(매수 및 매도)이 열리며,

설정에 지정된 모든 주문에 대해 첫 번째 주문의 시작 가격에 스탑이 지정됩니다. 즉, 추세가 역전되면 3개의 주문이 모두 동시에 마감되어야 합니다.


 extern int     _ms = 1000 ;  
extern double _lots = 0.01 ;
extern double _TP = 80 ;
extern double _SL = 35 ;

int _mn;
double pt;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  { 
   pt = Point ;
   if ( Digits == 3 || Digits == 5 ) {pt*= 10 ;} else pt = Point ;
   _mn = MagicNumberGenerator(_ms);
   Print ( "The magic number is " ,_mn);
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
     if (IsNewCandle())
    {
       if (TotalOpenOrders(_mn)== 0 )
      {
        EnterTrade( OP_BUY );
        EnterTrade( OP_SELL );
      }
    }   
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|   Открытие первых позиций                                        |
//+------------------------------------------------------------------+
void EnterTrade( int type)
{
   double price = 0 ; double sl = 0 ; double tp = 0 ; double lot = _lots;
   
   if       (type == OP_BUY )  price = Ask ;
   else if (type == OP_SELL ) price = Bid ;
   
   int err = 0 ;
   int ticket = OrderSend ( _Symbol , type, lot, price, 30 , 0 , 0 , NULL , _mn, 0 , clrGreen );
   if (ticket == - 1 )
   {
     err = GetLastError ();
     Print ( "Could not place the order due to error " ,err, " " ,ErrorDescription(err));
     if (err == ERR_TRADE_NOT_ALLOWED ) Alert ( "You need to enable you autotrade button" );
   }
   else 
   {
     if (! OrderSelect (ticket, SELECT_BY_TICKET ))
     {
       err = GetLastError ();
       Print ( "Could not select the order due to error " ,err, " " ,ErrorDescription(err));
     }
     else 
     {
       if ( OrderType ()== OP_SELL )
       {
         sl = OrderOpenPrice ()+(_SL*pt);
         if (_SL== 0 ) sl = 0 ; 
         tp = OrderOpenPrice ()-(_TP*pt);
       }  
       else if ( OrderType ()== OP_BUY )
       {
         sl = OrderOpenPrice ()-(_SL*pt);
         if (_SL== 0 ) sl = 0 ; 
         tp = OrderOpenPrice ()+(_TP*pt);
       }
       if (! OrderModify (ticket, OrderOpenPrice (), sl, tp, 0 , clrNONE ))
       err = GetLastError ();
       Print ( "Could not modify the order due to error " ,err, " " ,ErrorDescription(err));
     }
   }
}