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

 

그럼 질문 하나 더 :-)

가격이 있는 레이블을 이동하기 전에 현재 화면 너비를 사용하여 수평 위치를 계산합니다.

 x=width - 70 ;

사이드바를 열면 레이블이 화면에서 오른쪽으로 사라집니다. 로그에서 새로 고침 버튼을 클릭하면 표시기가 작동하는 것을 볼 수 있지만 레이블은 반환되지 않고 두 번째 시도에서만 나타납니다. OnCalculate가 매번 호출되지 않는 것으로 나타났습니까? 기능을 영구적으로 실행하는 방법은 무엇입니까?



 
psyman :

그럼 질문 하나 더 :-)

가격이 있는 레이블을 이동하기 전에 현재 화면 너비를 사용하여 수평 위치를 계산합니다.

사이드바를 열면 레이블이 화면에서 오른쪽으로 사라집니다. 로그에서 새로 고침 버튼을 클릭하면 표시기가 작동하는 것을 볼 수 있지만 레이블은 반환되지 않고 두 번째 시도에서만 나타납니다. OnCalculate가 매번 호출되지 않는 것으로 나타났습니까? 기능을 영구적으로 실행하는 방법은 무엇입니까?

OnChartEvent 에서 폴링 및 다시 그리기 수행 - CHARTEVENT_CHART_CHANGE

 

인사말. 말해 주세요.

표시기가 차트에 화살표를 그리고 화살표가 개체가 아닌 경우 차트 자체에서 또는 다른 방법으로 이러한 도면의 매개변수를 가져올 수 있습니까? 버퍼에서 데이터를 가져오고 테스트를 위해 표시기를 정상적으로 시작할 수도 없습니다.

 
Andrey Sokolov :

인사말. 말해 주세요.

표시기가 차트에 화살표를 그리고 화살표가 개체가 아닌 경우 차트 자체에서 또는 다른 방법으로 이러한 그리기에 대한 매개변수를 가져올 수 있습니까? 버퍼에서 데이터를 가져오고 테스트를 위해 표시기를 정상적으로 시작할 수도 없습니다.

표시 코드가 있습니까?

 
Alexey Viktorov :

표시 코드가 있습니까?

아니요

여기에서 데이터를 가져오려는 시도와 지표 자체에 대해 논의했습니다.

https://www.mql5.com/ru/forum/160587/page165#comment_10221621

Вопросы от начинающих MQL4 MT4 MetaTrader 4
Вопросы от начинающих MQL4 MT4 MetaTrader 4
  • 2019.01.04
  • www.mql5.com
Если у Вас вопросы по MQL4, MT4, MetaTrader 4, пожалуйста пишите в этой теме. Особенно когда вопросы касаются торговых функций...
 

교과서 에서 예제를 공부하고 있는데 그 중 하나가 한 줄에 컴파일되지 않습니다.

   Print ( "Запущен эксперт с именем " , MQLInfoString ( MQL5_PROGRAM_NAME )); 

'MQL5_PROGRAM_NAME' - 열거형을 변환할 수 없습니다. 마우스_2.mq5 29 52


 
Ilya Prozumentov :

상담원의 취업 허가증을 확인하십시오. 그리고 인쇄물의 출력은 어디에 있습니까? 이 코드 조각은 오류가 없기 때문에 무언가를 반환하는 것 같으며 문제는 이 코드 조각 외부에 있습니다. 이 부분에서 0으로 나누기가 발생할 수 있다는 점을 제외하고

전체 코드? 네 지금 요 .

 //+------------------------------------------------------------------+
//|                                                 Stop_Ma_v5.1.mq4 |
//|                                            Copyright 2018, axe44 |
//|                                 http://axe44.opentraders.ru/bio/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018,@ axe44"
#property link        "gerchikco.com/registration/?ref=sfaCLYmR"
#property version    "5.10"
#property strict

//--- Inputs
extern double Lots       = 0.1 ;     // Lots лот
extern bool Z_schet      = 1 ;       // Z_schet з-тенденция
extern int Expir         = 20 ;       // Expir истечение в часах
extern double klot       = 1.5 ;     // klot - множитель тенденции
extern int StopLoss      = 200 ;     // StopLoss лось
extern int TakeProfit    = 300 ;     // TakeProfit язь
extern int BULevel       = 0 ;       // BULevel уровень БУ
extern int BUPoint       = 3 ;       // BUPoint пункты БУ
extern int Spred         = 4 ;       // Spred спред 
extern int TrailingStop  = 0 ;       // TrailingStop трал
input ENUM_TIMEFRAMES TF1 = PERIOD_M15 ; //TF1 Время АТР
extern int Stop            = 14 ;           // Stop Периуд Stop
//extern int Atr_Procent   = 20;       //Atr_Procent  Максимальный процент АТР для работы
input ENUM_TIMEFRAMES TF2  = PERIOD_M15 ; //TF2 Время Ма открытия\закрытия 
//extern int Pr            = 50;       // Pr Процент разницы движения.
extern int MA            = 14 ;           //MA Периуд MA
extern int MaM           = 3 ;         //MaM способ расчёта Ма   
extern int StartHour     = 0 ;         //StartHour час начала торговли
extern int StartMin      = 30 ;       //StartMin минута начала торговли
extern int EndHour       = 23 ;       //EndHour час окончания торговли
extern int EndMin        = 30 ;       //EndMin минута окончания торговли
extern int Slip          = 30 ;       //Slip реквот
extern int Magic         = 124 ;       //Magic магик
extern int TesterMinPercentProfitTrades= 50 ;
extern int AutoLot       = 1 ;         // автолот

double atr,ma,rm,pm,minatr,lot,hma,lma,min,max,zn,C,pribul;
double NormalP[ 302 ];
int i,count,prom,index,psd,usd;
datetime t= 1 ,day,hour;
bool ww,nn,bb,ss;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   if ( Digits == 3 || Digits == 5 )
     {
      TakeProfit*= 10 ;
      StopLoss*= 10 ;
      TrailingStop*= 10 ;
      BUPoint*= 10 ;
      BULevel*= 10 ;
      Slip*= 10 ;
      Spred*= 10 ;
      
     }
//---
   return ( INIT_SUCCEEDED );
  }
  

//+------------------------------------------------------------------+
//| расчёт лота                                                      |
//+------------------------------------------------------------------+
double MoneyManagement()
  {
   double DynamicLot= 0 ;
   double Free_Equity= AccountEquity ();
   if (Free_Equity<= 0 ) return ( 0 );
   double TickValue= MarketInfo ( Symbol (), MODE_TICKVALUE );
   double LotStep= MarketInfo ( Symbol (), MODE_LOTSTEP );
   double MinLot= MarketInfo ( Symbol (), MODE_MINLOT );
   double MxLot= MarketInfo ( Symbol (), MODE_MAXLOT );
   if (TickValue*LotStep!= 0 ) DynamicLot= MathFloor ((Free_Equity* MathMin (AutoLot/ 10 , 100 )/ 1000 )/StopLoss*TickValue/LotStep)*LotStep; 
   if (DynamicLot<MinLot)DynamicLot=MinLot;
   if (DynamicLot>MxLot)DynamicLot=MxLot;
   return (DynamicLot);
  }
  
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   Comment ( "" );
  }

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt( int hb= 0 , int mb= 0 , int he= 0 , int me= 0 )
  {
   datetime db, de;           // Время начала и окончания работы
   int       hc;               // Часы текущего времени торгового сервера

   db= StrToTime ( TimeToStr ( TimeCurrent (), TIME_DATE )+ " " +( string )hb+ ":" +( string )mb);
   de= StrToTime ( TimeToStr ( TimeCurrent (), TIME_DATE )+ " " +( string )he+ ":" +( string )me);
   hc= TimeHour ( TimeCurrent ());

   if (db>=de)
     {
       if (hc>=he) de+= 24 * 60 * 60 ; else db-= 24 * 60 * 60 ;
     }

   if ( TimeCurrent ()>=db && TimeCurrent ()<=de) return ( True );
   else return ( False );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder( int type, double price)
  {
   int r= 0 ;
   color clr=Green;
   double sl= 0 ,tp= 0 ;

   if (type== 1 || type== 3 || type== 5 )
     {
      clr=Red;
       if (StopLoss> 0 ) sl= NormalizeDouble (price+StopLoss* Point , Digits );
       if (TakeProfit> 0 ) tp= NormalizeDouble (price-TakeProfit* Point , Digits );
     }

   if (type== 0 || type== 2 || type== 4 )
     {
      clr=Blue;
       if (StopLoss> 0 ) sl= NormalizeDouble (price-StopLoss* Point , Digits );
       if (TakeProfit> 0 ) tp= NormalizeDouble (price+TakeProfit* Point , Digits );
     }
   if (AutoLot> 0 ){lot=MoneyManagement();}
   if (AutoLot<= 0 ){lot=Lots;}
   r= OrderSend ( NULL ,type,lot, NormalizeDouble (price, Digits ),Slip,sl,tp, "" ,Magic, TimeCurrent ()+Expir* 60 * 60 ,clr);
   return ;
  }
//+------------------------------------------------------------------+
//| история                                                          |
//+------------------------------------------------------------------+
double history()
{

   if ( OrderSelect ( OrdersHistoryTotal ()- 1 , SELECT_BY_POS , MODE_HISTORY ))
     {   
      pribul= OrderProfit (); 
     }
     

return (pribul);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

int CountOrders( int type)
  {
    count= 0 ;
   for ( i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()==type) count++;
           }
        }
     }
   return (count);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

int CountTrades()
  {
    count= 0 ;
   for ( i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()< 2 ) count++;
           }
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  
double Znomer()
  {
    zn= 0 ;         // z-число
    psd= 0 ;         // кол. положительных сделок
    usd= 0 ;         // количество отрицательных сделок 
    ww= 0 ;         // боол переменная 
    nn= 0 ;         // боол переменная
    C= 0 ;           // C = количество чередований между отрицательными и положительными сделками
    index= OrdersHistoryTotal (); 
     if ( OrdersHistoryTotal ()> 302 ) index= 301 ; // берём не более 301 сделки
     if (index< 30 ) return ( 0 );                 // берём не менее 30
    count= OrdersHistoryTotal ();             // считаем от скольки 
    prom=count-index;                       // выделяем только последние сделки
     if (prom< 0 ) prom= 0 ;                     // исключаем ошибки
    
   for ( i=count;i>prom;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )== true )
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           { // далее магия
           pribul= OrderProfit (); 
           if (ww== 0 &&pribul> 1 ){C++;ww= 1 ;nn= 0 ;} // подсчитываем смену тенденции
           if (nn== 0 &&pribul< 1 ){C++;ww= 0 ;nn= 1 ;} // подсчитываем смену тенденции 
           if (pribul> 1 ){psd++;} //прибыльные сделки
           if (pribul< 1 ){usd++;} // убыточные сделки
           
           }
        }
     }
     /*/*
Величина Z = (A * (C — 0.5) — B)/   ((B*(B — C))/(C -1))^(1/2), где:
A = количество анализируемых сделок;
B = 2*количество прибыльных сделок * количество убыточных сделок;
C = количество чередований в выборке (чередованием считается каждая пара сделок, 
когда прибыльная сделка сменяет убыточную либо наоборот).
           */
            index=psd+usd;
             if (index< 30 ) return ( 0 );
            zn=(index*(C- 0.5 )-( 2 *psd*usd))/
             (((( 2 *psd*usd)*(( 2 *psd*usd)-C))/
            (C- 1 ))*(((( 2 *psd*usd)*(( 2 *psd*usd)-C))/
            (C- 1 ))* 0.5 ));
      
     
     
   return (zn);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for ( i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== OP_BUY )
              {
               if ( Bid - OrderOpenPrice ()>TrailingStop* Point )
                 {
                   if (( OrderStopLoss ()<( Bid -TrailingStop* Point )) || ( OrderStopLoss ()== 0 ))
                    {
                     mod= OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TrailingStop* Point , OrderTakeProfit (), 0 ,Yellow);
                     return ;
                    }
                 }
              }

             if ( OrderType ()== OP_SELL )
              {
               if (( OrderOpenPrice ()- Ask )>TrailingStop* Point )
                 {
                   if (( OrderStopLoss ()>( Ask +TrailingStop* Point )) || ( OrderStopLoss ()== 0 ))
                    {
                     mod= OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TrailingStop* Point , OrderTakeProfit (), 0 ,Yellow);
                     return ;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   for ( i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== OP_BUY )
              {
               if ( OrderOpenPrice ()<=( Bid -(BULevel+BUPoint)* Point ) && OrderOpenPrice ()> OrderStopLoss ())
                 {
                  m= OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()+BUPoint* Point , OrderTakeProfit (), 0 ,Yellow);
                  
                 }
              }

             if ( OrderType ()== OP_SELL )
              {
               if ( OrderOpenPrice ()>=( Ask +(BULevel+BUPoint)* Point ) && ( OrderOpenPrice ()< OrderStopLoss () || OrderStopLoss ()== 0 ))
                 {
                  m= OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()-BUPoint* Point , OrderTakeProfit (), 0 ,Yellow);
                  
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll( int ot=- 1 )
  {
   bool cl;
   for ( i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== 0 && (ot== 0 || ot==- 1 ))
              {
               RefreshRates ();
               cl= OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( Bid , Digits ),Slip,White);
              }
             if ( OrderType ()== 1 && (ot== 1 || ot==- 1 ))
              {
               RefreshRates ();
               cl= OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble ( Ask , Digits ),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {  
   if (t!= Time [ 0 ]&&( Ask - Bid )<Spred* Point )
 {
   ww= 1 ;
   nn= 1 ;
   t= Time [ 0 ]; 
   if (TrailingStop> 0 ) Trailing();
   if (BULevel> 0 ) BU();   
  
  rm = iMA ( NULL ,TF2,MA, 0 ,MaM, 0 , 1 )- iMA ( NULL ,TF2,MA, 0 ,MaM, 1 , 1 ); 
  pm = iMA ( NULL ,TF2,MA, 0 ,MaM, 0 , 2 )- iMA ( NULL ,TF2,MA, 0 ,MaM, 1 , 2 );   
  
   // Stop
  
   //---- maximums counting 

        hma = High [ iHighest ( NULL , 0 , MODE_HIGH ,Stop, 1 )]; 
        lma = Low [ iLowest ( NULL , 0 , MODE_LOW ,Stop, 1 )];
        
//----
//Print("hma ",hma);
//Print("lma ",lma);
//if ( Znomer()!=0) {zn=Znomer();Print("== Z-счёт равен = ",zn);}     

  }
  
   if (ww== 1 && pm< 0 && rm> 0 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin)) { if ( Ask <hma)PutOrder( 4 ,hma);
                                                                                   if ( Bid >lma)PutOrder( 5 ,lma);
                                                                                  ww= 0 ;} // Если цена раньше падала а теперь растёт
   if (nn== 1 && pm> 0 && rm< 0 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin)) { if ( Ask <hma)PutOrder( 4 ,hma);
                                                                                   if ( Bid >lma)PutOrder( 5 ,lma);
                                                                                  nn= 0 ;}
   
   
   
 }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester ()
{
     double PercentProfitTrades = 0 ;
     if ( TesterStatistics ( STAT_PROFIT_TRADES ) > 0 )
        PercentProfitTrades = TesterStatistics ( STAT_PROFIT_TRADES ) / TesterStatistics ( STAT_TRADES ) * 100 ;
     if (PercentProfitTrades >= TesterMinPercentProfitTrades)
         return ( NormalizeDouble (( TesterStatistics ( STAT_PROFIT ) / TesterStatistics ( STAT_EQUITY_DD )), 2 ));
     else return ( 0 );
}
//+------------------------------------------------------------------+

378행은 동일한 인쇄이며 활성화되면 EA가 더 이상 작동하지 않습니다.

221행과 223행의 코드 디자인에 오류가 있는 것 같다. 아무도 히스토리 열거를 사용하지 않으며 예제가 거의 없으므로 실수가 가능합니다. https://www.mql5.com/en/code/7452 페이지에 한 가지 예가 있지만 저에게는 너무 복잡합니다.
Znomer() 함수에서 0 으로 나누기, 206행, 제외했습니다.


지시와 권고를 기다리겠습니다. 고맙습니다.

Вычисление Z-счета
Вычисление Z-счета
  • www.mql5.com
Включаемый файл Z_include.mqh содержит функцию, которая вычисляет на массиве данных следующие параметры: Max - максимальное значение;Min - минимальное значение;матожидание - среднее значение;стандартное отклонение - среднеквадратичное отклонение (несмещенную оценку);скос;эксцесс;Z-счет на массиве данных. Описание понятия Z -счет смотрите в...
 
Andrey Sokolov :

아니요

여기에서 데이터를 가져오려는 시도와 지표 자체에 대해 논의했습니다.

https://www.mql5.com/en/forum/160587/page165#comment_10221621

죄송합니다. 저는 기본적으로 컴퓨터에서 .dll을 실행하지 않습니다. 나 없이 계속하십시오.
 
Alexey Viktorov :
죄송합니다. 저는 기본적으로 컴퓨터에서 .dll을 실행하지 않습니다. 나 없이 계속하십시오.

지표만 있을 뿐입니다. 매개변수에 사용될 때 두 번째 매개변수의 사용을 비활성화합니다.

파일:
BiforexV1.zip  161 kb
 
Aliaksei Karalkou :

전체 코드? 네 지금 요 .

378행은 동일한 인쇄이며 활성화되면 EA가 더 이상 작동하지 않습니다.

221행과 223행의 코드 디자인에 오류가 있는 것 같다. 아무도 히스토리 열거를 사용하지 않으며 예제가 거의 없으므로 실수가 가능합니다. https://www.mql5.com/en/code/7452 페이지에 한 가지 예가 있지만 저에게는 너무 복잡합니다.
Znomer() 함수에서 0 으로 나누기, 206행, 제외했습니다.


지시와 권고를 기다리겠습니다. 고맙습니다.

zn=(index*(C- 0.5 )-( 2 *psd*usd))	/   (((( 2 *psd*usd)*(( 2 *psd*usd)-C))/(C- 1 ))*(((( 2 *psd*usd)*(( 2 *psd*usd)-C))/(C- 1 ))* 0.5 ));

수식에 추가 (( 2 *psd*usd)*(( 2 *psd*usd)-C))/(C- 1 )) .

지수: ^0.5는 *0.5가 아닙니다.

zn=(index*(C- 0.5 )- 2 *psd*usd)  /  pow((( 2 *psd*usd*( 2 *psd*usd-C))/(C- 1 )), 0.5) ;

본 심볼과 마법에 대한 단일 거래가 없거나 수익 또는 손실 거래가 하나도 없거나 한 쌍(C=1)만 있는 경우 0으로 나눕니다.

공식 자체 전에 psd와 usd가 > 0이고 C !=1인지 확인해야 합니다.

수익성이 있는 것은 이익 > 1, 무익한 것 < 1, 이익 = 1인 것으로 간주됩니다. 즉, 1도 한 그룹 또는 다른 그룹의 어딘가에 포함되어야 합니다.

함수에서 먼저 기호와 마법과 일치하는 거래 번호를 선택한 다음 번호가 변경되었는지 확인하고 변경되었으면 zn을 다시 계산하고 그렇지 않으면 zn을 반환합니다(이 경우 zn을 재설정하지 않고 확인 != 인쇄가 필요하지 않은 경우 0)

올빼미는 변수 ww와 nn에 의존하기 때문에 작동을 멈춥니다. 함수가 시작되면 올빼미 알고리즘이 변경되고 파괴됩니다.

코드 서식 오류가 있으면 아무 것도 컴파일되지 않습니다.