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

 
Aleksei Stepanenko # :

이것이 왜 수행되는지 모르겠습니다. 본질적으로 이것은 부울 함수입니다.

이 같은:

열거형에서 요소는 0부터 시작합니다. 즉, Ok=0 ,AllocError=1

즉, GetRepeat는 0 또는 1을 반환합니다.

각각 ! GetRepeat는 반환 값의 부정입니다.

0은 거짓, 1은 참


당신은 당신의 머리를 부술 수 있습니다

정확히!)) 감사합니다, Alexey!

 
별말씀을요 :)
 

안녕하세요!!!

다음은 주문 그리드의 평균 가격을 계산하여 차트에 표시하는 기능입니다. 그리드가 닫힌 후 중간 선을 나타내는 수평선은 제거되지 않습니다.

주문 그리드가 닫힌 후 이러한 행이 삭제되도록 기능을 추가하는 데 도움이 됩니다. 감사해요!!!

 //+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice( int ot=- 1 )
  {
   double order_lots = 0 , order_price = 0 , avg_price = 0 ;
     {
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType()==ot||ot< 0 )
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble (order_price / order_lots, Digits );

   if ( ObjectFind ( 0 , "AveragePriceLine" + IntegerToString (ot))!= 0 )
       ObjectCreate ( 0 , "AveragePriceLine" + IntegerToString (ot), OBJ_HLINE , 0 , 0 , avg_price);
   else
       ObjectSetDouble ( 0 , "AveragePriceLine" + IntegerToString (ot), OBJPROP_PRICE ,avg_price);
   if (ot== 0 )
      ObjectSet( "AveragePriceLine" + IntegerToString (ot), OBJPROP_COLOR , clrLime );
   if (ot== 1 )
      ObjectSet( "AveragePriceLine" + IntegerToString (ot), OBJPROP_COLOR , clrMagenta );
   return (avg_price);
  }

 
EVGENII SHELIPOV # :

안녕하세요!!!

다음은 주문 그리드의 평균 가격을 계산하여 차트에 표시하는 기능입니다. 그리드가 닫힌 후 중간 선을 나타내는 수평선은 제거되지 않습니다.

주문 그리드가 닫힌 후 이러한 행이 삭제되도록 기능을 추가하는 데 도움이 됩니다. 감사해요!!!

이것은 여기서 하면 안 됩니다.

 void OnTick ()
  {
//---
   if ( ObjectFind ( 0 , "AveragePriceLine" + 0 )== 0 &&CountTrade( 0 )< 1 ) //для бай
     { ObjectDelete ( 0 , "AveragePriceLine" + 0 );}
   if ( ObjectFind ( 0 , "AveragePriceLine" + 1 )== 0 &&CountTrade( 1 )< 1 ) //для селл
     { ObjectDelete ( 0 , "AveragePriceLine" + 1 );}

   .....

  }
 
MakarFX # :

이것은 여기서 하면 안 됩니다.

Makar, void OnTick()에 바인딩하는 방법

 
MakarFX # :

이것은 여기서 하면 안 됩니다.

Makar 덕분에 약간의 파일이 수정되었으며 모든 것이 정상입니다.

 

말해 주세요.

EA는 주문을 여는 시작 및 종료 시간을 설정합니다. 이 시간이 차트에 표시되도록 만들고 싶었습니다. 지금까지는 작동하지 않습니다. 다음은 코드입니다. 도와주세요, 제발!!!

 //-------------------------------------------------------------------+  Команда на открытие первых ордеров в сетке
   if ((UseHour== 1 &&Hour()>=StartTime&&Hour()<=StopTime)||UseHour== 0 )
   ObjectCreate ( 0 , "Начало торговли" , OBJ_VLINE , 0 , 0 , StartTime);
   ObjectSetInteger ( 0 , "Начало торговли" , OBJPROP_COLOR , clrBlue );
   ObjectCreate ( 0 , "Окончание торговли" , OBJ_VLINE , 0 , 0 , StopTime);
   ObjectSetInteger ( 0 , "Окончание торговли" , OBJPROP_COLOR , clrBlue );
     {
       if (CountTrade( 0 )== 0 && CountTrade( 1 )== 0 && TradeSignal()== 0 )
         SendFirsOrder( 0 );
       if (CountTrade( 1 )== 0 && CountTrade( 0 )== 0 && TradeSignal()== 1 )
         SendFirsOrder( 1 );
     }
 
EVGENII SHELIPOV # :

말해 주세요.

EA는 주문을 여는 시작 및 종료 시간을 설정합니다. 이 시간이 차트에 표시되도록 만들고 싶었습니다. 지금까지는 작동하지 않습니다. 다음은 코드입니다. 도와주세요, 제발!!!

변수 StartTime 및 StopTime 표시
 
MakarFX # :
변수 StartTime 및 StopTime 표시
 extern string                TIME                           = "Настройки времени" ;
extern int                   UseHour                        = 1 ;         // Торговля в установленное время "0"-ВЫКЛ, "1"-ВКЛ
extern int                   StartTime                      = 1 ;         // Начало торговли
extern int                   StopTime                       = 19 ;         // Окончание торговли
 
EVGENII SHELIPOV #:
   if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
     {
      if(ObjectFind(0,"Начало торговли"+TimeToString(Time[0],TIME_DATE))!=0)
        {
         ObjectCreate(0,"Начало торговли"+TimeToString(Time[0],TIME_DATE),OBJ_VLINE,0,Time[0]+(StartTime*3600),0);
         ObjectSetInteger(0,"Начало торговли"+TimeToString(Time[0],TIME_DATE),OBJPROP_COLOR, clrBlue);
         ObjectCreate(0,"Окончание торговли"+TimeToString(Time[0],TIME_DATE),OBJ_VLINE,0,Time[0]+(StopTime*3600),0);
         ObjectSetInteger(0,"Окончание торговли"+TimeToString(Time[0],TIME_DATE),OBJPROP_COLOR, clrBlue);
        }
      if(CountTrade(0)==0 && CountTrade(1)==0 && TradeSignal()==0)
         SendFirsOrder(0);
      if(CountTrade(1)==0 && CountTrade(0)==0 && TradeSignal()==1)
         SendFirsOrder(1);
     }
사유: