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

 
kopeyka2:

пока так 

другой (не родной) таймфрейм 


А общем, помощь вы игнорируете. Я выхожу из диалога. Дальше без меня - все данные для правильной работы кода я дал, но слышать вы не желаете, и делаете что-то по-своему. Время жаль.
 
Artyom Trishkin:
А общем, помощь вы игнорируете. Я выхожу из диалога. Дальше без меня - все данные для правильной работы кода я дал, но слышать вы не желаете, и делаете что-то по-своему. Время жаль.

Спасибо, что уделили внимание и потратили время.... Наверное до меня еще не дошло что то... Про колеса и мотор согласен.

Скорее всего откажусь от хэндэла и рассчитаю среднее значение по iClose за период средней. 

 
kopeyka2:

Спасибо, что уделили внимание и потратили время.... Наверное до меня еще не дошло что то... Про колеса и мотор согласен.

Скорее всего откажусь от хэндэла и рассчитаю среднее значение по iClose за период средней. 

//+------------------------------------------------------------------+
//|                                                       TestMA.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                                 https://mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://mql5.com"
#property version   "1.00"
#property description "Выводит данные скользящей средней с заданного таймфрейма на любом текущем"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot LWMA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input uint                 InpPeriod         =  14;            // MA period
input int                  InpShift          =  0;             // MA shift
input ENUM_MA_METHOD       InpMethod         =  MODE_SMA;      // MA method
input ENUM_APPLIED_PRICE   InpApplierPrice   =  PRICE_CLOSE;   // MA applied price
input ENUM_TIMEFRAMES      InpTimeframe      =  PERIOD_H1;     // LRMA timeframe
//--- indicator buffers
double         BufferMA[];
//--- global variables
//ENUM_TIMEFRAMES   timeframe1;
int            period_ma;
int            shift_ma;
int            handle_ma;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- timer
   EventSetTimer(90);
//--- set global variables
   period_ma=int(InpPeriod<1 ? 1 : InpPeriod);
   shift_ma=InpShift;
   //timeframe1=(InpTimeframe>Period() ? InpTimeframe : Period());
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferMA,INDICATOR_DATA);
//--- setting indicator parameters
   IndicatorSetString(INDICATOR_SHORTNAME,"Any TF MA on current");
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//--- setting plot buffer parameters
   string label=TimeframeToString(InpTimeframe)+" "+MethodToString(InpMethod)+"("+(string)period_ma+")";
   PlotIndexSetString(0,PLOT_LABEL,label);
//--- setting buffer arrays as timeseries
   ArraySetAsSeries(BufferMA,true);
//--- create handles
   ResetLastError();
   handle_ma=iMA(NULL,InpTimeframe,period_ma,shift_ma,InpMethod,InpApplierPrice);
   if(handle_ma==INVALID_HANDLE)
     {
      Print("The ",TimeframeToString(InpTimeframe)," iMA(",(string)period_ma,") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
//--- get timeframe
   Time(NULL,InpTimeframe,1);
//---
   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[])
  {
//--- Проверка количества доступных баров
   if(rates_total<fmax(period_ma,4)) return 0;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-1;
      ArrayInitialize(BufferMA,EMPTY_VALUE);
     }
//--- Подготовка данных
   if(Time(NULL,InpTimeframe,1)==0)
      return 0;
   int bars=(InpTimeframe==PERIOD_CURRENT ? rates_total : Bars(NULL,InpTimeframe));
   int count=(limit>1 ? fmin(bars,rates_total) : 1),copied=0;
   copied=CopyBuffer(handle_ma,0,0,count,BufferMA);
   Comment(TimeframeToString(InpTimeframe)," ",MethodToString(InpMethod),": copied=",copied,", count=",count,", bars=",bars,", rates_total=",rates_total);
   if(copied!=count) return 0;
      
//--- Расчёт индикатора
   //for(int i=limit; i>=0 && !IsStopped(); i--)
   //  {
   //   
   //  }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Custom indicator timer function                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   Time(NULL,InpTimeframe,1);
  }
//+------------------------------------------------------------------+
//| Возвращает Time                                                  |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   datetime array[];
   ArraySetAsSeries(array,true);
   return(CopyTime(symbol_name,timeframe,shift,1,array)==1 ? array[0] : 0);
  }
//+------------------------------------------------------------------+
//| Возвращает наименование таймфрейма                               |
//+------------------------------------------------------------------+
string TimeframeToString(const ENUM_TIMEFRAMES timeframe)
  {
   return StringSubstr(EnumToString(timeframe),7);
  }
//+------------------------------------------------------------------+
//| Возвращает наименование метода МА                                |
//+------------------------------------------------------------------+
string MethodToString(ENUM_MA_METHOD method)
  {
   return StringSubstr(EnumToString(method),5);
  }
//+------------------------------------------------------------------+

Убрал всё лишнее.

Не забывайте, что в выходные нет тиков и линия будет сразу выводиться только на совпадающих таймфреймах - рабочем, и тем, что в настройках.

Если же запустить на ином таймфрейме, нежели тот, который указан в настройках, то без тиков в выходные нужно принудительно обновлять график правой кнопкой мыши: Refresh, чтобы линия отрисовалась.

 
Artyom Trishkin:

Убрал всё лишнее.

Не забывайте, что в выходные нет тиков и линия будет сразу выводиться только на совпадающих таймфреймах - рабочем, и тем, что в настройках.

Если же запустить на ином таймфрейме, нежели тот, который указан в настройках, то без тиков в выходные нужно принудительно обновлять график правой кнопкой мыши: Refresh, чтобы линия отрисовалась.

Спасибо многократное !!1  Весь день калупаюсь…. глаза зашились. СПС еще раз
 

Всем добрый день.

 
Разобрался.  Спасибо. 
 
Всем добрый день.
Столкнулся с проблемой рассогласования времени, прошу помощи в ее решении.
Пытаясь разобраться, почему поздно уходят ордера, в советнике вывожу в журнал отладочную информацию, она абсолютно достоверная, видно в скриншоте. Обнаруживаю, что время сообщения на 4,5 часа больше, чем время начала баров (TF=M30), именно с этим отставанием уходят ордера. Т.е. по отладочной информации вижу, что условие для входа выполнено, например на баре время 10:00, а ордер уходит на баре со временем 14:30. Впервые с таким столкнулся. Что делать?
Файлы:
MT5dataerror.jpg  724 kb
 

Нашел на ютьюбе код трэйлинг стопа, как его можно использовать?

#include <Trade\Trade.mqh> 
CTrade trade;

void OnTick()
  {
    double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
    
         if(PositionsTotal()<2)
    
    trade.Buy(0.10,NULL,Ask,(Ask-1000 * _Point),(Ask+500 * _Point),NULL);
    
    CheckTrailingStop(Ask);
   
  }
void   CheckTrailingStop(double Ask)
  {
     double SL = NormalizeDouble(Ask - 150 * _Point,_Digits);
     
     for (int i=PositionsTotal()-1; i>=0; i--)
     {
     string symbol=PositionGetSymbol(i);
     if (_Symbol==symbol)
     {
     ulong PositionTicket=PositionGetInteger(POSITION_TICKET);
     
     double CurrentStopLoss=PositionGetDouble(POSITION_SL);
     if (CurrentStopLoss<SL)
     {
       trade.PositionModify(PositionTicket,(CurrentStopLoss + 10*_Point),0);
     }
   }
  }   
}
 
Vladimir Baskakov:

Нашел на ютьюбе код трэйлинг стопа, как его можно использовать?

этот трал только для бай и реализован так себе, его использовать нельзя.

 
Nikolay Khrushchev:

этот трал только для бай и реализован так себе, его использовать нельзя.

Ок, спасибо
Причина обращения: