Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1540

 
Ich bitte um Hilfe aus der Gemeinschaft...
MT5
Es ist nicht möglich, die Optimierung durch Überschreitung der Parameter für mehrere Paare gleichzeitig durchzuführen.
Wenn ich im Tester unter "Symbol" die Option "Alle Symbole von Market Watch" auswähle, wird die Möglichkeit, die Überschreitung der Eingabeparameter auf der Registerkarte "Parameter" einzustellen, deaktiviert, d. h. es werden keine Kontrollkästchen aktiviert und keine Werte eingegeben. Was sollte getan werden?
 
MikeZv:
Ich bitte um Hilfe aus der Gemeinschaft...
MT5
konnte keine Optimierung durch Überschreitung der Parameter für mehrere Paare gleichzeitig durchführen.
Wenn ich in der Spalte "Symbol" des Testers die Option "Alle Symbole von Market Watch" auswähle, ist die Möglichkeit, die Überschreitung der Eingabeparameter auf der Registerkarte "Parameter" einzustellen, deaktiviert, d. h. es werden keine Kontrollkästchen markiert und keine Werte eingegeben. Was sollte getan werden?

auf einige wenige Zeichen wird nicht optimiert, sondern es wird lediglich der Handel mit denselben Parametern getestet (verifiziert).

 

Hallo zusammen.

Bitte helfen Sie mir, einen Indikator in mql5 zu schreiben, so dass es eine Schaltfläche, zwei Preis-Parameter, Zeitbereich auf dem Chart gibt.

Wenn Sie diese Daten eingeben und auf die Schaltfläche klicken, wird auf dem Diagramm ein ausgefülltes Rechteck mit dem oberen und unteren Preis und der Dauer im angegebenen Zeitbereich gezeichnet.

 

Hallo. Ich versuche, eine Schwalbe mit einer Eule auf einer MA zu "verbinden".

aber es funktioniert nicht....

Ich sollte gleich sagen, dass die Codes hier auf der Website öffentlich zugänglich sind.

Ich gebe nicht vor, sie zu benutzen.

//+-----------------------------------------------------------------------------------------------+
//|                                                                     Simple Moving Average.mq4 |
//|                                                                 Copyright 2016, Andrey Minaev |
//|                                                     https://www.mql5.com/ru/users/id.scorpion |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2016, Andrey Minaev"
#property link      "https://www.mql5.com/ru/users/id.scorpion"
#property version   "1.00"
#property strict

// Параметры советника
extern string sParametersEA = "";     // Параметры советника
extern double dLots         = 0.01;    // Количество лотов
extern int    iStopLoss     = 30;     // Уровень убытка (в пунктах)
extern int    iTakeProfit   = 30;     // Уровень прибыли (в пунктах)
extern int    iSlippage     = 3;      // Проскальзование (в пунктах)
extern int    iMagic        = 1;      // Индентификатор советника
extern double K_Martin     = 2.0;     // мартин
extern int    DigitsLot    = 2;       // для мартина
extern int    OrdersClose  = 5;       // мартин сделки
// Параметры индикатора
extern string sParametersMA = "";     // Параметры индикатора
extern int    iPeriodMA     = 14;     // Период усреднения
// Глобальные переменные
double dMA;
//+-----------------------------------------------------------------------------------------------+
int OnInit()
  {
// Если брокер использует 3 или 5 знаков после запятой, то умножаем на 10
   if(Digits == 3 || Digits == 5)
     {
      iStopLoss   *= 10;
      iTakeProfit *= 10;
      iSlippage   *= 10;
     }

   return(INIT_SUCCEEDED);
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0, iPeriodMA, 0, MODE_SMA, PRICE_CLOSE, 0);

// Если нет открытых ордеров, то входим в условие
   if(bCheckOrders() == true)
     {
      // Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

      // Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция проверки открытых оредров |
//+-----------------------------------------------------------------------------------------------+
bool bCheckOrders()
  {
// Переберем в цикле ордера, для проверки открытых ордеров данным советником
   for(int i = 0; i <= OrdersTotal(); i++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
            return(false);

   return(true);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на покупку |
//+-----------------------------------------------------------------------------------------------+
bool bSignalBuy()
  {
   if(dMA > Open[1] && dMA < Close[1])
      return(true);

   return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if(dMA < Open[1] && dMA > Close[1])
      return(true);

   return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на покупку |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenBuy()
  {
   int iOTi = 0;   // Тикет ордера

   iOTi = OrderSend(Symbol(), OP_BUY, dLots, Ask, iSlippage, 0, 0, "", iMagic, 0, clrNONE);

// Проверим открылся ли ордер
   if(iOTi > 0)
      // Есди да, то выставим уровни убытка и прибыли
      vOrderModify(iOTi);
   else
      // Если нет, то получим ошибку
      vError(GetLastError());
  }

//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на продажу |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenSell()
  {
   int iOTi = 0;   // Тикет ордера

   iOTi = OrderSend(Symbol(), OP_SELL, dLots, Bid, iSlippage, 0, 0, "", iMagic, 0, clrNONE);

// Проверим открылся ли ордер
   if(iOTi > 0)
      // Есди да, то выставим уровни убытка и прибыли
      vOrderModify(iOTi);
   else
      // Если нет, то получим ошибку
      vError(GetLastError());
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                    Функция модификации ордера |
//+-----------------------------------------------------------------------------------------------+
void vOrderModify(int iOTi)
  {
   int    iOTy = -1;   // Тип ордера
   double dOOP = 0;    // Цена открытия ордера
   double dOSL = 0;    // Стоп Лосс
   int    iMag = 0;    // Идентификатор советника

   double dSL = 0;     // Уровень убытка
   double dTP = 0;     // Уровень прибыли
// double OL= dLots;    // для мартина

// Выберем по тикету открытый ордер, получим некоторые значения
   if(OrderSelect(iOTi, SELECT_BY_TICKET, MODE_TRADES))
     {
      iOTy = OrderType();
      dOOP = OrderOpenPrice();
      dOSL = OrderStopLoss();
      iMag = OrderMagicNumber();
     }

// Если ордер открыл данный советник, то входим в условие
   if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMag)
     {
      // Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордер
      if(dOSL == 0)
        {
         if(iOTy == OP_BUY)
           {
            dSL = NormalizeDouble(dOOP - iStopLoss * Point, Digits);
            dTP = NormalizeDouble(dOOP + iTakeProfit * Point, Digits);

            bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
           }

         if(iOTy == OP_SELL)
           {
            dSL = NormalizeDouble(dOOP + iStopLoss * Point, Digits);
            dTP = NormalizeDouble(dOOP - iTakeProfit * Point, Digits);

            bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
           }
        }
     }

  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                      Функция обработки ошибок |
//+-----------------------------------------------------------------------------------------------+
void vError(int iErr)
  {
   switch(iErr)
     {
      case 129:   // Неправильная цена
      case 135:   // Цена изменилась
      case 136:   // Нет цен
      case 138:   // Новые цены
         Sleep(1000);
         RefreshRates();
         break;

      case 137:   // Брокер занят
      case 146:   // Подсистема торговли занята
         Sleep(3000);
         RefreshRates();
         break;
     }
  }
//+-----------------------------------------------------------------------------------------------+
double LOT()
  {
   int n=0;
   double OL=dLots;
   for(int j = OrdersHistoryTotal()-1; j >= 0; j--)
     {
      if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
           {
            if(OrderProfit()<0)
              {
               if(n==0)
                  OL=NormalizeDouble(OrderLots()*K_Martin,DigitsLot);
               n++;
               if(n>=OrdersClose)
                 {
                  Comment("1");
                  return(dLots);
                 }
              }
            else
              {
               if(n==0)
                 {
                  Comment("2");
                  return(dLots);
                 }
               else
                 {
                  Comment("3");
                  return(OL);
                 }
              }
           }
        }
     }
   return(OL);
  }
//+------------------------------------------------------------------+
 
законопослушный гражданин:

Hallo. Ich versuche, eine Schwalbe mit einer Eule auf einer MA zu "verbinden".

aber es funktioniert nicht....

Ich sollte gleich sagen, dass die Codes hier auf der Website öffentlich zugänglich sind.

Ich würde gerne wissen, wo ich einen Fehler gemacht habe.

Auf den ersten Blick.

      if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
           {
            if(OrderProfit()<0)

Sie suchen nach einem Verlustauftrag. Ich denke, Sie sollten zuerst die letzte geschlossene Position finden und sich dann den Gewinn ansehen, und wenn dieser negativ ist, dann "OrderLots()*K_Martin".

 
законопослушный гражданин:


aber irgendetwas funktioniert nicht....


Sehr informative Beschreibung des Problems

 

Hallo!

Kann jemand beraten, wie man 2,3... in der Strategie-Tester in der MT4-Terminal laufen, laufen 2,3... EA zum Testen?

 
законопослушный гражданин:

Hallo!

Kann jemand beraten, wie man 2,3... in der Strategie-Tester in der MT4-Terminal laufen, laufen 2,3... ... zu testen?

zu einer Einheit verbinden

 
законопослушный гражданин:

Hallo!

Kann jemand beraten, wie man 2,3... in der Strategie-Tester in der MT4-Terminal laufen, laufen 2,3... EA zum Testen?

Es ist, als würde man in ein Auto steigen und in drei Richtungen losfahren.

\\\\\\\\\\\\\\\\\\\\\\\\\\\

obwohl Sie einen Expert Advisor mit mehreren Währungen erstellen könnten - für jede dieser Währungen eine eigene Funktion

 

Danke, das ist eine gute Idee!