Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 992

 
kopeyka2:

per ora

altro (non nativo) lasso di tempo


E in generale, ignori l'aiuto. Sono fuori dal dialogo. Vi ho dato tutti i dati per far funzionare correttamente il codice, ma voi non volete sentirli, quindi fate le cose a modo vostro. È un peccato per il tempo.
 
Artyom Trishkin:
Comunque, stai ignorando l'aiuto. Sono fuori dal dialogo. Vi ho dato tutti i dati perché il codice funzioni correttamente, ma voi non volete ascoltarli e fate le cose a modo vostro. È un peccato per il tempo.

Grazie per l'attenzione e il tempo .... Credo di non averlo ancora capito... Sulle ruote e sul motore sono d'accordo.

Probabilmente rinuncerò al palmare e calcolerò la media iClose per il periodo medio.

 
kopeyka2:

Grazie per l'attenzione e il tempo .... Credo di non averlo ancora capito... Sulle ruote e sul motore sono d'accordo.

Probabilmente rinuncerò al palmare e calcolerò la media iClose per il periodo medio.

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

Rimosso tutto il superfluo.

Non dimenticate che non ci sono tick nel fine settimana e la linea sarà emessa solo agli stessi timeframe - quello di lavoro e quello nelle impostazioni.

Se lo si esegue su un timeframe diverso da quello specificato nelle impostazioni, allora senza tick nel fine settimana, è necessario aggiornare forzatamente il grafico con il tasto destro del mouse: Refresh, in modo che la linea venga disegnata.

 
Artyom Trishkin:

Rimosso tutto il superfluo.

Non dimenticare che non ci sono tick nel fine settimana e la linea sarà visualizzata solo sui timeframe corrispondenti - quello di lavoro e quello nelle impostazioni.

Se lo si esegue su un timeframe diverso da quello specificato nelle impostazioni, allora senza tick nel fine settimana, è necessario aggiornare forzatamente il grafico con il tasto destro del mouse: Refresh, in modo che la linea venga disegnata.

Grazie molte volte!!1 Ho pasticciato tutto il giorno.... i miei occhi sono ricuciti. Grazie ancora
 

Buon pomeriggio a tutti.

 
Capito, grazie.
 
Buon pomeriggio a tutti.
Di fronte al problema della mancata corrispondenza dei tempi, per favore aiutatemi a risolverlo.
Cercando di capire perché gli ordini sono in ritardo, sto registrando le informazioni di debug nel mio EA, è assolutamente corretto, si può vedere nello screenshot. Ho notato che l'ora del messaggio è 4,5 ore più dell'ora di inizio delle barre (TF=M30) ed è questo ritardo che causa il ritardo degli ordini. Cioè, secondo le informazioni di debug vedo che la condizione per entrare nel mercato è stata soddisfatta, per esempio, l'ora sulla barra è 10:00 ma l'ordine è piazzato sulla barra con l'ora 14:30. È la prima volta che incontro una situazione del genere. Cosa fare?
File:
MT5dataerror.jpg  724 kb
 

Ho trovato il codice trailing stop su youtube, come può essere usato?

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

Ho trovato il codice trailing stop su youtube, come può essere usato?

Questo trawl è solo per l'acquisto ed è implementato male, non può essere usato.

 
Nikolay Khrushchev:

questo trawl è solo per l'acquisto ed è implementato male, non può essere usato.

Ok, grazie.