Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 323

 

D.h. wenn ich Daten nach diesem Druck erhalte und die Meldung im Logbuch

Wait Data for GBPUSD 

der Test nach dem Algorithmus abläuft?

 
R0MAN:

D.h. wenn ich Daten nach diesem Druck erhalte und die Meldung im Logbuch

der Test nach dem Algorithmus abläuft?

In welcher Funktion befindet sich die Zeile? Wenn es in OnInit() ist - dann nach dieser Zeile, alles darunter wird nicht funktionieren... OnCalculate() beginnt zu funktionieren. Wir testen mit einem nicht vollständig initialisierten GBPUSD-Indikator.
 
Hallo alle, ich habe die#property strictRichtlinie und 4 Fehler aufgetaucht.
Fehler in 2,3,5,8 Zeilen

if (CloseFriday == TRUE && DayOfWeek() == 5 && TimeCurrent() >= StrToTime(CloseFridayHour + ":00")) return (0);
op = NormalizeDouble(Bid,Digits);
tp = NormalizeDouble(Bid - (TakeProfit)*Point,Digits);
wenn (TakeProfit==0) tp=0;
sl = NormalizeDouble(Bid + (StopLoss)*Point,Digits);
wenn (StopLoss==0) sl=0;
CalcLot();
Ticket=OrderExists(OP_SELL);
if (Ticket<MaxTrades && OrderSymbol()==Symbol())
wenn (Ticket==-1)
 
MigVRN:
Aber in welcher Zeile soll sie stehen? Wenn es in OnInit() ist - alles darunter wird nicht funktionieren... OnCalculate() beginnt zu funktionieren. Wir testen mit einem nicht vollständig initialisierten GBPUSD-Indikator.

Verstanden. Ich danke Ihnen. Das hat es noch nie gegeben...

OnCalculate() beginnt zu funktionieren.

//------------------------------------------------------------------    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++) // проходим по треубемому промежутку и расчитываем медиану
        {
 

Guten Tag liebe Forumsnutzer.

Können Sie mir bitte den Grund nennen, warum sich der Zyklus nicht wiederholt?

Dies ist meine erste Test-Kreation, so-so urteilen Sie nicht streng).

Vielen Dank im Voraus.

//+-------------------Переменные 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:

Guten Tag liebe Forumsnutzer.

Können Sie mir bitte den Grund nennen, warum sich der Zyklus nicht wiederholt?

Dies ist meine erste Test-Kreation, so-so urteilen Sie nicht streng).

Vielen Dank im Voraus.

Guten Abend. Fügen Sie die Variable kolpos in den Körper von start() ein.
 
Tapochun:
Guten Abend. Fügen Sie die Variable kolpos in den Körper von start() ein.
Ich danke Ihnen für Ihre prompte Antwort. Sehr hilfreich.
 

Hallo zusammen!

Die Situation ist wie folgt.

Der Expert Advisor arbeitet auf TF M15.

Gleichzeitig kann ich keine Preisdaten für ältere TFs kopieren ( z.B. CopyHigh(Symbol,PERIOD_D1,0,period,Hi_array) )

kann nicht länger als ein Jahr kopieren. Im Allgemeinen ist das nicht verwunderlich, denn die Synchronisationsergebnisse zeigen etwa 25 Tausend 15M Takte, was genau einem Jahr entspricht.

Wie kann ich Daten für einen längeren Zeitraum erhalten? Soll ich es mit D1 synchronisieren oder gibt es eine andere Möglichkeit?

 
metatrader4 745build, wie kann man ein Skript für eine frühere Version einfügen, die Skripte funktionieren nicht
 
valera5111:
Metatrader4 745build, wie fügt man ein Skript für eine frühere Version ein, Skripte funktionieren nicht

Bitte klären Sie, was genau Sie tun wollen?

Beschreiben Sie, welche Fehler auftreten (beim Kompilieren schauen Sie auf die Registerkarte "Fehler", beim Starten im Terminal auf die Registerkarte "Experten").

Grund der Beschwerde: