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

 

C'est-à-dire que si je comprends bien, lorsque l'on reçoit des données après cette impression et le message dans le journal de bord

Wait Data for GBPUSD 

le test se déroule selon l'algorithme ?

 
R0MAN:

C'est-à-dire que si je comprends bien, lorsque l'on reçoit des données après cette impression et le message dans le journal de bord

le test se déroule selon l'algorithme ?

Dans quelle fonction se trouve la ligne ? Si c'est dans OnInit() - alors après cette ligne, tout ce qui est en dessous ne fonctionnera pas... OnCalculate() commence à fonctionner. Nous testons avec un indicateur GBPUSD pas complètement initialisé.
 
Bonjour à tous, j'ai mis la directive#property strict et 4 erreurs sont apparues.
erreurs en 2,3,5,8 lignes

if (CloseFriday == TRUE && DayOfWeek() == 5 && TimeCurrent() >= StrToTime(CloseFridayHour + ":00")) return (0) ;
op = NormalizeDouble(Bid,Digits) ;
tp = NormalizeDouble(Bid - (TakeProfit)*Point,Digits) ;
si (TakeProfit==0) tp=0 ;
sl = NormalizeDouble(Bid + (StopLoss)*Point,Digits) ;
si (StopLoss==0) sl=0 ;
CalcLot() ;
Ticket=OrderExists(OP_SELL) ;
si (Ticket<MaxTrades && OrderSymbol()==Symbol())
si (Ticket==-1)
 
MigVRN:
Mais dans quelle ligne doit-il se situer ? Si c'est dans OnInit() - tout ce qui est en dessous ne fonctionnera pas... OnCalculate() commence à fonctionner. Nous testons avec un indicateur GBPUSD pas complètement initialisé.

Compris. Merci. Cela n'est jamais arrivé avant...

OnCalculate() commence à fonctionner.

//------------------------------------------------------------------    OnInit
int OnInit()
{
        SetIndexBuffer(0, Mediana, INDICATOR_DATA);
        ArraySetAsSeries(Mediana, true);
        // задали имена валют
      ...
//------------------------------------------------------------------    OnCalculate
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[])
{

        for (int i=0; i<6; i++) if (Pair[i].CopyBuf(nBars)<0) { Print("Wait Data for "+Pair[i].m_name); return(0); } // получили данные из МА в буфера // при ошибке выходим
        
        int limit=rates_total-prev_calculated; if (limit>=rates_total) limit=rates_total-1; // ограничили на таймсерию
        if (limit>nBars) limit=nBars; // ограничили на число скопированных данных
        
        for(int i=0; i<limit; i++) // проходим по треубемому промежутку и расчитываем медиану
        {
 

Bonjour, chers utilisateurs du forum.

Veuillez me dire pourquoi le cycle ne se répète pas.

Il s'agit de ma première création test, alors ne jugez pas sévèrement).

Merci d'avance.

//+-------------------Переменные MACD--------------------------------+
extern int fast_ema_period=12; // период быстрой средней
extern int slow_ema_period=26; // период медленной средней
extern int signal_period=9; // период усреднения разности
extern int shift_MACD=0; // сдвиг индикатора MACD
//+-------------------Переменные DeM---------------------------------+
extern int DeM_period=14; // период усреднения
extern double levelUP=0.7; // верхний уровень
extern double levelDONE=0.3; // нижний уровень
extern int shift_DeM=0; // сдвиг индикатора DeM
//+-------------------Общие переменные-------------------------------+
extern int Magic=7770000; // магический номер
extern double Lot=0.01; // размер лота
extern int slippage=4; // проскальзывание цены
extern int SL=150; // СтопЛосс
extern int TP=300; // ТейкПрофит
int kolpos=0; // количество позиций советника
//+------------------------------------------------------------------+
//| Старт советника                                                  |
//+------------------------------------------------------------------+
int start()                                  
{
   double MAIN=iMACD(Symbol(),0,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_MAIN,shift_MACD);
   double SIGNAL=iMACD(Symbol(),0,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_SIGNAL,shift_MACD);
   double DeMval=iDeMarker(Symbol(),0,DeM_period,shift_DeM);
//---
   for (int pos=0; pos<OrdersTotal(); pos++)
      {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      kolpos++;
      }
   if(kolpos==0)
      {
      if(MAIN>0&&SIGNAL>0&&SIGNAL>MAIN&&DeMval>levelUP)
      OrderSend(Symbol(),OP_SELL,Lot,Bid,slippage,Bid+SL*Point,Bid-TP*Point,NULL,Magic,0,clrBlue);
      if(MAIN<0&&SIGNAL<0&&SIGNAL<MAIN&&DeMval<levelDONE)
      OrderSend(Symbol(),OP_BUY,Lot,Ask,slippage,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,clrRed);
      }
//---
   return(0);
} 
 
N0mad:

Bonjour, chers utilisateurs du forum.

Pouvez-vous me dire la raison pour laquelle le cycle ne se répète pas.

Il s'agit de ma première création test, alors ne jugez pas sévèrement).

Merci d'avance.

Bonsoir. Mettez la variable kolpos dans le corps de start().
 
Tapochun:
Bonsoir. Mettez la variable kolpos dans le corps de start().
Merci pour votre réponse rapide. Très utile.
 

Bonjour, tout le monde !

Voici la situation.

Le conseiller expert travaille sur le TF M15.

En même temps, je ne peux pas copier les données de prix pour les anciens TFs ( par exemple CopyHigh(Symbol,PERIOD_D1,0,period,Hi_array) )

ne peut pas copier plus d'un an. En général, ce n'est pas surprenant, car les résultats de la synchronisation montrent environ 25 mille barres de 15M, ce qui correspond exactement à une année.

Comment puis-je obtenir des données pour une période plus longue ? Dois-je le synchroniser avec D1 ou ai-je un autre moyen ?

 
metatrader4 745build, comment insérer un script pour une version antérieure, les scripts ne fonctionnent pas
 
valera5111:
Metatrader4 745build, comment insérer un script pour une version antérieure, les scripts ne fonctionnent pas

Veuillez préciser ce que vous voulez faire exactement.

Décrivez les erreurs qui se produisent (lors de la compilation, regardez l'onglet "Erreurs", lors du lancement dans le terminal, regardez l'onglet "Experts").

Raison: