초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 779

 
Alexey Volchanskiy :

도움이 필요하면 아무도 .ex5를 필요로 하지 않습니다. 소스를 게시하세요.


톱질하다가도 이게 소스인줄 알았어요 :-) 다른 아이콘도 보고.... 둘중에 소스가 뭔지 생각해보니........이거 :-)

그것은 아니 .... 그리고 모두 같은 것으로 밝혀졌습니다.

파일:
ChekParam.mq5  11 kb
 

결론은 펄스가 차트 끝에서 마이너스 세 번째 막대에서 0이고 0으로 그려지는 것입니다. 그리고 버퍼에서는 null이 아닙니다.

뭔지 모르겠지만 icustom을 우회하여 모든 PULSE 코드를 새 표시기에 넣어 문제를 해결했습니다.

마이너스 두 번째 막대에는 그런 버그가 없습니다. 나는 코드에서 다른 것을 변경하지 않았으므로 이것은 실제로 메타 인용의 잼입니다.

 
LookingFor :

결론은 펄스가 차트 끝에서 마이너스 세 번째 막대에서 0이고 0으로 그려지는 것입니다. 그리고 버퍼에서는 null이 아닙니다.

뭔지 모르겠지만 icustom을 우회하여 모든 PULSE 코드를 새 표시기에 넣어 문제를 해결했습니다.

마이너스 두 번째 막대에는 그런 버그가 없습니다. 나는 코드에서 다른 것을 변경하지 않았으므로 이것은 실제로 메타 인용의 잼입니다.


코드가 없으면 Jamb는 귀하의 것입니다. 불행히도 도움을 요청했지만 자료를 제공하지 않았습니다 ...

 
그리고 누구를 도울 수 있습니까??? 오류는 무엇이며 표시기가 잘못 표시되는 이유는 무엇입니까?
파일:
ChekParam.mq5  11 kb
 
Vladislav Andruschenko :

코드가 없으면 Jamb는 귀하의 것입니다. 불행히도 도움을 요청했지만 자료를 제공하지 않았습니다 ...

Vladislav, 정의의 이름으로 본질이 무엇인지 이해하려는 열망과 당신에 대한 존경심에서 나는 코드를 제공합니다.


 //+------------------------------------------------------------------+
//|                                                   PULS_SWING.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots    1
//--- plot Pulse_Swing
#property indicator_label1   "Pulse_Swing"
#property indicator_type1   DRAW_LINE
#property indicator_color1   clrRed
#property indicator_style1   STYLE_SOLID
#property indicator_width1   1
//--- input parameters
input double    points= 0.005 ;
input double    begin_price_level= 1.0 ;
//--- indicator buffers
double          Pulse_Swing [], pulse [] , trend [] , delta [];
int PULSE_Handle ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Pulse_Swing, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,pulse, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 2 ,trend, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 3 ,delta, INDICATOR_CALCULATIONS );
   IndicatorSetInteger ( INDICATOR_DIGITS , 0 );
   ResetLastError (); 
   PULSE_Handle = iCustom ( NULL , 0 , "PULSE" ,
                          points,           // Points
                          begin_price_level           // begin_price_level
                          );
   Print ( "PULSE_Handle" ,PULSE_Handle, "  error = " , GetLastError ()); 
//---
   PlotIndexSetInteger ( 0 , PLOT_LINE_STYLE , STYLE_SOLID );
   //ArrayFree (pulse);ArrayFree (delta);ArrayFree (Pulse_Swing);
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
   int   bar, start  ;
   if (prev_calculated== 0 )
   {pulse [ 0 ] = pulse [ 1 ] = 0 ; start =begin+ 2 ;}
   else {start = prev_calculated ;}
   //Print(IntegerToString(bar));
   for (bar= start ;bar<rates_total;bar ++)
   { CopyBuffer (PULSE_Handle, 0 ,bar, 1 ,pulse);
   //Print(IntegerToString(pulse[bar]));
   if ((pulse [bar- 1 ]- pulse [bar - 2 ])> 0 ) trend[bar- 1 ] = 1 ; // 
   else
   if ((pulse [bar- 1 ] - pulse [bar - 2 ])< 0 ) trend[bar- 1 ] = - 1 ; //
   else
   if (pulse [bar- 1 ] == pulse [bar - 2 ])  {trend[bar- 1 ] = trend[bar- 2 ] ;} // 
   else 
   continue ;
   delta[bar] = pulse[bar]- pulse[bar- 1 ];
   if (trend [bar- 1 ]== 1 && pulse [bar] != pulse [bar- 1 ])
   Pulse_Swing [bar] = Pulse_Swing [bar- 1 ] + delta[bar];
   else
   if (trend [bar- 1 ]== - 1 && pulse [bar] != pulse [bar- 1 ])
   Pulse_Swing [bar] = Pulse_Swing [bar- 1 ] - delta[bar];
   else
   if (delta [bar]== 0 )Pulse_Swing [bar] = Pulse_Swing [bar- 1 ] ;
   }
   //Print(IntegerToString(delta[rates_total-1]));
   Print ( IntegerToString (delta[rates_total- 2 ]));
   //Print(IntegerToString(pulse[rates_total-1]));
   Print ( IntegerToString (pulse[rates_total- 3 ]));
   Print ( IntegerToString (pulse[rates_total- 2 ]));
   Print ( IntegerToString (pulse[rates_total- 1 ]));
  
//--- return value of prev_calculated for next call
   return (rates_total);
  }
 

거래 결과를 읽을 수 없습니다. 다음과 같이 썼습니다.

 MqlTradeRequest request={ 0 };
MqlTradeResult result={ 0 };
//--- установка параметров операции
....
//--- отправка запроса
if ( ! OrderSend (request,result) )
   PrintFormat ( "OrderSend error %d" , GetLastError ()); // если отправить запрос не удалось
else // Я хочу получить парамеры резултата
{ Sleep ( 9999 ); // Жду получения резултата
   double ClosePrice=result.price;
}

Sleep을 제거하면 항상 ClosePrice=0.0 을 얻습니다. 10초를 기다려도(더 하고 싶지는 않음) 거의 항상 결과를 얻지만 때로는 그렇지 않습니다.

항상 결과를 얻으려면 어떻게 해야 합니까?

OrderSend()에 대한 설명은 다음과 같습니다.

메모

거래 요청은 거래 서버에서 여러 단계의 확인을 거칩니다. 먼저 요청 매개변수 의 모든 필수 필드를 채우는 것이 정확한지 확인 하고 오류가 없으면 서버는 추가 처리를 위해 주문을 수락합니다. 거래 서버에서 주문을 성공적으로 수락하면 OrderSend() 함수가 true를 반환합니다.

즉, OrderSend()에서 true를 얻을 때 MqlResult 매개변수를 얻지 못합니다. 올바르게 이해하는 경우입니다.

그들은 언제 나에게 올까요?

 
Ivan Ivanov :

거래 결과를 읽을 수 없습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

주문을 수정할 때 오류 131이 발생합니다.

fxsaber , 2017.09.12 19:47

거래 서버 이름과 기호만 작성하면 누구나 시도할 수 있기 때문에 문제가 최대한 빨리 해결됩니다.

그 사이에 과제는 해결책을 찾는 것이 아니라 예/아니오로 대답하는 것이라는 느낌을 받습니다.

 

로드 프로그래머,

그런 질문: MT5의 전략 테스터 가 시가에서만 좋은 결과를 얻었다면 로봇이 시가로만 거래를 열면 비슷한 결과가 나올까?

 
Dzyga :

로드 프로그래머,

그런 질문: MT5의 전략 테스터 가 시가에서만 좋은 결과를 얻었다면 로봇이 시가로만 거래를 열면 비슷한 결과가 나올까?


이것을 확인하는 것은 쉽습니다. 시작 가격(즉, 바가 생성되는 순간)에서만 EA에서 오프닝을 만들고 틱 생성 모드 "모든 틱"에서 테스터에서 확인합니다.

 

동료 여러분, 도와주세요

사이클에 무엇이 문제인지 이해가 되지 않습니다. 핸들의 데이터가 rsa1 배열로 이동하지 않습니다.

 if (prev_calculated == 0 ){i=bars =start= 1 ;}
   else {start = prev_calculated ;}
   for ( bars=start ; bars<rates_total ; bars ++)
  { CopyBuffer (pulse_Handle, 0 ,start, 1 ,pca1);
  
   if (pca1[bars]!=pca1[bars- 1 ]) {pca2[i]=pca1[bars]; i++;
   string s= "" ;s= IntegerToString (pca1[bars])+ "  " ; Print (s); continue ;}
   else continue ;}
사유: