Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 992

 
kopeyka2:

por agora

outro período de tempo (não nativo)


E, em geral, está a ignorar a ajuda. Estou fora do diálogo. Dei-lhe todos os dados para que o código funcionasse correctamente, mas não o quer ouvir, por isso faz as coisas à sua maneira. É uma pena a época.
 
Artyom Trishkin:
De qualquer forma, está a ignorar a ajuda. Estou fora do diálogo. Dei-vos todos os dados para o código funcionar correctamente, mas não querem ouvi-lo, e fazem as coisas à vossa maneira. É uma pena a época.

Obrigado pela vossa atenção e tempo.... Acho que ainda não descobri... Sobre as rodas e o motor concordo.

Provavelmente vou desistir da mão e calcular a média iClose para o período médio.

 
kopeyka2:

Obrigado pela vossa atenção e tempo.... Acho que ainda não descobri... Sobre as rodas e o motor concordo.

Provavelmente vou desistir da mão e calcular a média iClose para o período médio.

//+------------------------------------------------------------------+
//|                                                       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);
  }
//+------------------------------------------------------------------+

Removido tudo o que era desnecessário.

Não se esqueça que não há carraças no fim-de-semana e a linha só será produzida ao mesmo tempo - trabalhando uma e a outra nas definições.

Se o executar num período de tempo diferente do especificado nas definições, então sem carraças no fim-de-semana, é necessário actualizar forçosamente o gráfico com o botão direito do rato: Actualizar, para que a linha seja desenhada.

 
Artyom Trishkin:

Removido tudo o que era desnecessário.

Não esquecer que não há ticks no fim-de-semana e a linha será exibida apenas nos prazos correspondentes - o que funciona e o que está nas definições.

Se o executar num período de tempo diferente do especificado nas definições, então sem carraças no fim-de-semana, é necessário actualizar forçosamente o gráfico com o botão direito do rato: Actualizar, para que a linha seja desenhada.

Obrigado muitas vezes!!1 Tenho andado a brincar o dia todo.... os meus olhos estão cosidos. Mais uma vez obrigado
 

Boa tarde, a todos.

 
Já está. Obrigado.
 
Boa tarde a todos.
Perante o problema da descoordenação temporal, por favor ajude a resolvê-lo.
Tentando compreender porque é que as encomendas estão atrasadas, estou a registar informação de depuração na minha EA, é absolutamente correcto, pode vê-la na imagem do ecrã. Noto que a hora da mensagem é 4,5 horas a mais do que a hora de início das barras (TF=M30) e é este atraso que faz com que as encomendas se atrasem. Ou seja, de acordo com a informação de depuração, vejo que a condição para entrar no mercado foi cumprida, por exemplo, a hora no bar é 10:00 mas a encomenda é colocada no bar com a hora 14:30. Esta é a primeira vez que me deparo com uma tal situação. O que fazer?
Arquivos anexados:
MT5dataerror.jpg  724 kb
 

Encontrado o código de parada de arrasto no youtube, como pode ser utilizado?

#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:

Encontrado o código de parada de arrasto no youtube, como pode ser utilizado?

Esta rede de arrasto é apenas para compra e é mal implementada, não pode ser utilizada.

 
Nikolay Khrushchev:

esta rede de arrasto é apenas para compra e é mal implementada, não pode ser utilizada.

Está bem, obrigado.