Questions des débutants MQL5 MT5 MetaTrader 5 - page 992

 
kopeyka2:

pour le moment

autre délai (non-natif)


Et en général, tu ignores l'aide. Je ne suis plus dans le dialogue. Je vous ai donné toutes les données pour que le code fonctionne correctement, mais vous ne voulez pas les entendre, alors vous faites les choses à votre façon. C'est dommage pour l'heure.
 
Artyom Trishkin:
De toute façon, vous ignorez l'aide. Je ne suis plus dans le dialogue. Je vous ai donné toutes les données pour que le code fonctionne correctement, mais vous ne voulez pas les entendre et faites les choses à votre façon. C'est dommage pour l'heure.

Merci pour votre attention et votre temps.... Je suppose que je n'ai pas encore compris... Pour les roues et le moteur, je suis d'accord.

Je vais probablement renoncer à l'ordinateur de poche et calculer la moyenne iClose pour la période moyenne.

 
kopeyka2:

Merci pour votre attention et votre temps.... Je suppose que je n'ai pas encore compris... Pour les roues et le moteur, je suis d'accord.

Je vais probablement renoncer à l'ordinateur de poche et calculer la moyenne iClose pour la période moyenne.

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

J'ai enlevé tout ce qui était inutile.

N'oubliez pas qu'il n'y a pas de ticks le week-end et que la ligne ne sera produite qu'aux mêmes horizons temporels - celui du travail et celui des paramètres.

Si vous l'exécutez sur un cadre temporel autre que celui spécifié dans les paramètres, alors sans ticks le week-end, vous devez forcer le rafraîchissement du graphique avec le bouton droit de la souris : Rafraîchir, pour que la ligne soit tracée.

 
Artyom Trishkin:

J'ai enlevé tout ce qui était inutile.

N'oubliez pas qu'il n'y a pas de ticks le week-end et que la ligne ne sera affichée que sur les périodes correspondantes - celle de travail et celle des paramètres.

Si vous l'exécutez sur un cadre temporel autre que celui spécifié dans les paramètres, alors sans ticks le week-end, vous devez forcer le rafraîchissement du graphique avec le bouton droit de la souris : Rafraîchir, pour que la ligne soit tracée.

Merci beaucoup !1 Je me suis amusé toute la journée.... mes yeux sont cousus. Merci encore.
 

Bonjour à tous.

 
Je l'ai. Merci.
 
Bon après-midi à tous.
Confronté à un problème de décalage horaire, merci de nous aider à le résoudre.
J'essaie de comprendre pourquoi les ordres sont en retard, j'enregistre des informations de débogage dans mon EA, c'est tout à fait correct, vous pouvez le voir dans la capture d'écran. Je constate que l'heure du message est supérieure de 4,5 heures à l'heure de début des barres (TF=M30) et c'est ce décalage qui provoque le retard des ordres. C'est-à-dire que, selon les informations de débogage, je vois que la condition d'entrée sur le marché a été remplie, par exemple, l'heure sur la barre est 10:00 mais l'ordre est placé sur la barre avec l'heure 14:30. C'est la première fois que je rencontre une telle situation. Que faire ?
Dossiers :
MT5dataerror.jpg  724 kb
 

J'ai trouvé un code de trailing stop sur youtube, comment l'utiliser ?

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

J'ai trouvé un code de trailing stop sur youtube, comment l'utiliser ?

Ce chalut est uniquement destiné à l'achat et est mal implémenté, il ne peut pas être utilisé.

 
Nikolay Khrushchev:

ce chalut est uniquement destiné à l'achat et est mal implémenté, il ne peut pas être utilisé.

Ok, merci.