Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 779

 
Alexey Volchanskiy:

.ex5 никому не нужен, хочешь помощи - публикуй исходник


Пилять а таки и думал что это исходник :-) Ещё такорй смотрю значки другие.... задумался какойже из них исходник......этот :-)

Оказалось что нет....И всётаки

Файлы:
ChekParam.mq5  11 kb
 

суть в том что pulse на минус третьем с конца баре на графике нулевой  и отрисовывается как  нулевой . А в буфере он не нулевой 

Я не знаю что это было , но вопрос решил засунув весь код PULSE  в новый индикатор , минуя icustom.

тогда этого бага на минус втором баре нет . Больше ничего в коде не менял , так что реально это косяк метаквотов.

 
LookingFor:

суть в том что pulse на минус третьем с конца баре на графике нулевой  и отрисовывается как  нулевой . А в буфере он не нулевой 

Я не знаю что это было , но вопрос решил засунув весь код PULSE  в новый индикатор , минуя icustom.

тогда этого бага на минус втором баре нет . Больше ничего в коде не менял , так что реально это косяк метаквотов.


без кода, косяк может быть только Ваш. к сожалению, прося помощи, ВЫ не дали материала...

 
И всётаки ктонить может помочь??? В чём ошибка,почему индикатор отображается неправильно.
Файлы:
ChekParam.mq5  11 kb
 
Vladislav Andruschenko:

без кода, косяк может быть только Ваш. к сожалению, прося помощи, ВЫ не дали материала...

Владислав , во имя справедливости , желания понять в чем же суть и из уважения к Вам , привожу код.


//+------------------------------------------------------------------+
//|                                                   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() сказано :

Примечание

Торговый запрос проходит несколько стадий проверок на торговом сервере. В первую очередь проверяется корректность заполнения всех необходимых полей параметра request, и при отсутствии ошибок сервер принимает ордер для дальнейшей обработки. При успешном принятии ордера торговым сервером функция OrderSend() возвращает значение true.

То есть , когда я получаю true от OrderSend(), я не получаю параметри MqlResult - если правильно понял.

Когда они придут ко мне ?

 
Ivan Ivanov:

У меня что то не получается прочитать результат торговой операции.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

При модификации ордера возникает ошибка 131

fxsaber, 2017.09.12 19:47

Надо всего лишь написать название торгового сервера и символ, и проблема будет решена в кратчайшие сроки, потому как каждый сам сможет попробовать.

А пока складывается ощущение, что задача не найти решение, а отвечать да/нет.

 

Господа программисты,

Такой вопрос: Если на тестере стратегий в МТ5 хороший результат только по ценам открытия, будет ли аналогичный результат если в роботе сделать открытие сделок только по цене открытия?

 
Dzyga:

Господа программисты,

Такой вопрос: Если на тестере стратегий в МТ5 хороший результат только по ценам открытия, будет ли аналогичный результат если в роботе сделать открытие сделок только по цене открытия?


Проверить это легко: делаете в советнике открытие только по цене открытия (то есть в момент рождения бара) и в тестере проверяете в режиме генерации тиков "Все тики".

 

Коллеги , помогите пожалуйста 

не пойму что с циклом не так , данные из Хэндла не поступают в массив рса1

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 ;}
Причина обращения: