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

 
STARIJ :
스크립트를 작성하고 각 명령문 뒤에 Alert() 함수 와 함께 정보 + GetLastError() 표시 - 바로 위의 스크립트 예제 참조
코드에 오류가 있는 경우 어떻게 해야 합니까? 스크립트가 작동하지 않으면 Alert()가 도움이 되지 않습니다!
 
Lowech :
코드에 오류가 있는 경우 어떻게 해야 합니까? 스크립트가 작동하지 않으면 Alert()가 도움이 되지 않습니다!

스크립트에서 첫 번째 줄을 제외한 모든 것을 삭제하고 Alert 를 추가하십시오 . 그런 다음 점진적으로 추가 - 프로그래밍 및 디버그 학습

 
LRA :
당신은 그것을 빨리 얻었다. 어떻게 바를 찾을 수 있습니까? 사용할 루프 또는 시간 구조에서?

EURUSD

 //+-------------------------------------------------------+
//| Проверка дней недели                       PRVERKA.mq4|
//| если первая пятница месяца была бычьей, а             |
//| 2-й понедельник медвежий - открываем сделку на продажу|
//+-------------------------------------------------------+
#property strict
void OnStart ()
{
   int День= Day (), ДеньН= DayOfWeek ();
   Alert ( "----------------------" );
   int ДеньНачалаМесяца = (ДеньН-День+ 36 ) % 7 ;

// Если день начала месяца = 6, то число первой пятницы равно 7. Иначе 6 - день начала месяца
   int ЧислоПервойПятницы = ДеньНачалаМесяца== 6 ? 7 : 6 -ДеньНачалаМесяца;

// Если день начала месяца < 2, то число второго понедельника равно 9 - день начала месяца. Иначе 16 - день начала месяца
   int ЧислоВторогоПонедл = (ДеньНачалаМесяца< 2 ? 9 : 16 )-ДеньНачалаМесяца;
   Alert ( "ЧислоПервойПятницы = " , ЧислоПервойПятницы, "  ЧислоВторогоПонедл = " , ЧислоВторогоПонедл);

   if (ЧислоВторогоПонедл>=День)
  {
     Alert ( "Надо подождать числа " , ЧислоВторогоПонедл+ 1 );
     return ;   // Отключил до числа, следующего за вторым понедельником
  }

   int Продавать= 0 ;
   for ( int Бар= 0 ;;Бар++)   //  Ищем на D1 номера баров для заданных чисел месяца
  {
     if ( TimeDay ( iTime ( NULL , PERIOD_D1 ,Бар))==ЧислоВторогоПонедл)
    {
       if ( iClose ( NULL , PERIOD_D1 ,Бар)< iOpen ( NULL , PERIOD_D1 ,Бар)) Продавать++;
       break ;
    }
     if ( TimeDay ( iTime ( NULL , PERIOD_D1 ,Бар))==ЧислоПервойПятницы)
       if ( iClose ( NULL , PERIOD_D1 ,Бар)> iOpen ( NULL , PERIOD_D1 ,Бар)) Продавать++;
  }
   if (Продавать== 2 ) bool x= OrderSend ( _Symbol , OP_SELL , 0.1 , Bid , 7 , 0 , 0 );
}
 
LRA :

스크립트에서 첫 번째 줄을 제외한 모든 항목을 삭제하고 Alert를 추가합니다. 그런 다음 점진적으로 추가 - 프로그래밍 및 디버그 학습

도움을 주셔서 감사합니다.
 
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=주문 유형();
안녕하세요. 도움이 필요합니다. 매도 주문이 마감된 경우 다음 주문은 매수로만 열 수 있도록 해야 합니다. 주문 내역 을 사용하여 마지막 마감된 주문을 찾고 유형을 찾고 싶지만 작동하지 않습니다 나를 위해 (내가 무엇을 잘못하고 있는지 누가 알겠습니까?) 코드를 작동시키는 데 도움이 될 답변을 모르는 사람은 작성하지 마십시오!
 
Lowech :
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=주문 유형();
안녕하세요. 도움이 필요합니다. 매도 주문이 마감된 경우 다음 주문은 매수로만 열 수 있도록 해야 합니다. 주문 내역 을 사용하여 마지막 마감된 주문을 찾고 유형을 찾고 싶지만 작동하지 않습니다 나를 위해 (내가 무엇을 잘못하고 있는지 누가 알겠습니까?) 코드를 작동시키는 데 도움이 될 답변을 모르는 사람은 작성하지 마십시오!
브로드캐스트하려고 하면 '1' - 이름이 필요하다는 오류 메시지가 표시됩니다. 숫자 1 대신 변수 이름이 필요합니다.
 

좋은 저녁입니다. 아래 코드는 틱 카운터가 작성되었습니다. 이론적으로 사이클의 각 막대에서 틱을 계산하는 방법을 원했습니다. 새 막대 마다 카운터가 재설정되고 표시기가 시작되면 표시창에 표시됩니다. 마지막 막대에 1 틱이 있고 현재 틱이 순간부터 계산되기 시작한다는 주석

초기화한 다음 몇 개의 촛불이 온라인으로 작동할 때 모든 것이 올바르게 정렬되어 모든 것이 틱의 양과 일치함을 보여줍니다. 내가 뭔가를 잘못 썼나?

 #property indicator_chart_window
double old_price;
double count_plus= 0 ,count_minus= 0 ,sum= 0 ,psum= 0 ;
bool Fun_New_Bar= false ;
datetime Prev_Time= 0 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   
//---
   return ( INIT_SUCCEEDED );
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {

   double price;
   int i= 0 ;
   int limit; 
   double delta; 
limit=rates_total-prev_calculated;
if (prev_calculated< 1 ) limit=rates_total- 1 ;
for (i=limit; i>= 0 ; i--)  
{
 if (Fun_New_Bar== false )                              
  {                                             
   
   if (Prev_Time== 0 ) 
     {
        Prev_Time=time[i];
        Fun_New_Bar= false ;
     }
   if (Prev_Time!=time[i])                        
     {
      Prev_Time=time[i];
      psum=sum;
      count_plus= 0 ;
      count_minus= 0 ;
      sum= 0 ;                         
      Fun_New_Bar= false ;                            
     }
    } 
   if (old_price== 0 ) old_price=close[i];
   
    price = close[i];
    delta = price - old_price;
     
     //-- считаем "верхние" тики 
     if (delta>= 0 ) {
      count_plus++;
               }
      
     //-- считаем "нижние" тики
     if (delta< 0 ) {
      count_minus++;
        }
    sum=count_minus+count_plus;   
         //----
    old_price=price;
    
   Comment ( StringFormat ( "Выводим цены\ncount_minus = %G\ncount_plus = %G\nsum = %G\npsum = %G" ,count_minus,count_plus,sum,psum));
}

   return (rates_total);
  }
 
PokrovMT5 :

좋은 저녁입니다. 아래 코드는 틱 카운터가 작성되었습니다. 이론적으로 사이클의 각 막대에서 틱을 계산하는 방법을 원했습니다. 새 막대 마다 카운터가 재설정되고 표시기가 시작되면 표시창에 표시됩니다. 마지막 막대에 1 틱이 있고 현재 틱이 순간부터 계산되기 시작한다는 주석

초기화한 다음 몇 개의 촛불이 온라인으로 작동할 때 모든 것이 올바르게 정렬되어 모든 것이 틱의 양과 일치함을 보여줍니다. 내가 뭔가를 잘못 썼나?

문제와 질문 자체를 제대로 이해했다면 이력에 틱이 저장되지 않습니다. 내 지표 를 확인하십시오.

 
Alexey Viktorov :

문제와 질문 자체를 제대로 이해했다면 이력에 틱이 저장되지 않습니다. 내 지표 를 확인하십시오.


링크가 작동하지 않습니다, 페이지가 없다고 나옵니다

 
PokrovMT5 :

좋은 저녁입니다. 아래 코드는 틱 카운터가 작성되었습니다. 이론적으로 사이클의 각 막대에서 틱을 계산하는 방법을 원했습니다. 새 막대 마다 카운터가 재설정되고 표시기가 시작되면 표시창에 표시됩니다. 마지막 막대에 1 틱이 있고 현재 틱이 순간부터 계산되기 시작한다는 주석

초기화한 다음 몇 개의 촛불이 온라인으로 작동할 때 모든 것이 올바르게 정렬되어 모든 것이 틱의 양과 일치함을 보여줍니다. 내가 뭔가를 잘못 썼나?

반환 rate_total-1 또는 0