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

 
Vitaly Muzichenko:
Das ist nicht klar. Wenn es notwendig ist, den EA zu stoppen, dann wird die vorgeschlagene Variante damit fertig, wenn es nicht notwendig ist, ihn zu stoppen, dann lassen Sie ihn handeln und schränken Sie ihn nicht in irgendeiner Weise ein. Wenn wir nach dem Stop auf Abruf handeln wollen, genügt es, die Zeit zu ändern, Disabled wird wahr und das Programm wird weiter arbeiten
Okay, danke.
 
trader781:
Okay, danke.

Sie möchten wahrscheinlich die Möglichkeit haben, in den Eingabeparametern anzugeben, ob Sie nach Börsenschluss handeln oder nicht?

Wenn ja, dann bitte sehr:

extern bool OneTrade = true;

// OnTick
if(OneTrade && !Disabled) return;

Ich habe die Flagge nicht vermasselt.

 
Vitaly Muzichenko:

Sie möchten wahrscheinlich die Möglichkeit haben, in den Eingabeparametern anzugeben: "Handel nach Börsenschluss oder kein Handel nach Börsenschluss"?

Wenn ja, dann bitte sehr:

extern bool OneTrade = true;

// OnTick
if(OneTrade && !Disabled) return;

Ich scheine mit der Flagge nichts falsch gemacht zu haben.

Ok, ich habe es verstanden, das habe ich übersehen. Ich dachte, eine Variable würde ausreichen, wenn sie richtig platziert wird.
 
Vitaly Muzichenko:

Ich danke Ihnen!

Die Frage ist: Wie korrekt ist dieser Eintrag, der am Anfang des Programms steht, während im gesamten Programm viele Time[0] und Time[1] verwendet werden, die nicht jedes Mal aufgerufen werden müssen, sondern in eine Variable geschrieben werden. Es scheint keine Fehler außerhalb des Arrays zu geben, aber alles ist oberflächlich definiert:

datetime TM[], TIME0, TIME1;

//------------
void OnTimer()

ArraySetAsSeries(TM, true);
  if(CopyTime(_Symbol, PERIOD_CURRENT, 0, 2, TM)==-1) return;
   TIME0 = TM[0];
   TIME1 = TM[1];

Danke!

Im Grunde genommen macht es keinen Unterschied, ob man auf eine Variable oder eine Array-Zelle zugreift. Vielleicht liegt es nur an der Erfassungsgeschwindigkeit, aber ich denke, es ist mikroskopisch, eine Messung mit Variablen und direktem Zugriff auf das Array durchzuführen.
 
Vitaly Muzichenko:

Darf ich Sie bitten, es ein wenig anzupassen?

Setzen Sie eine vertikale Linie beim aktuellen Kurs

oder einen Link zu einem EA, in dem dies verfügbar ist

Ich möchte verstehen, wie man die Parameter des Bots verteilt, damit er funktioniert

 
trader781:

Darf ich Sie bitten, es ein wenig anzupassen?

Setzen Sie eine vertikale Linie beim aktuellen Kurs

oder einen Link zu einem EA, in dem dies verfügbar ist

Ich möchte verstehen, wie man die Parameter des Bots verteilt, damit er funktioniert

Zuerst müssen Sie die Anzeige der Zitate um 90 Grad drehen.
 
Alexey Viktorov:
Zuerst müssen Sie die Kursanzeige um 90 Grad drehen.

Beitrag 998.

Es ist mir egal, ob es horizontal oder vertikal ist, es ist nur so, dass das, was ich dort gemacht habe, im Moment nicht funktioniert.

 
trader781:

Beitrag 998.

Es ist mir egal, ob es horizontal oder vertikal ist, es ist nur so, dass das, was ich dort gemacht habe, jetzt nicht mehr funktioniert.

Nein, tut mir leid, ich werde mich nicht darauf einlassen.
 
Ich habe festgestellt, dass die Leute oft nach einer Schleppnetz- oder Break-even-Funktion fragen. Ich habe eine Blueprint-Funktion erstellt, mit der ein Stop auf ein bestimmtes Break-Even-Niveau verschoben und eine Stop-Position um den Wert eines Indikators nachgezogen werden kann, der seine Linien auf dem Preisdiagramm zeichnet (z. B. MA oder Parabolic), die der Funktion übergeben werden.

#property strict // в самое начало кода вашей программы (если нету там ещё)


// Функцию - за пределы остальных функций программы
//+------------------------------------------------------------------+
//| Трейлинг по значению + перенос стопа на уровень безубытка        |
//+------------------------------------------------------------------+
void TrailingByLevel(string symbol_name,           // Имя символа
                     int magic_number,             // Magic ордера
                     double level_of_trail,        // Уровень, на который ставим стоп (например МА или Parabolic SAR)
                     int trailing_start,           // Профит в пунктах для старта трала
                     int trailing_step,            // Шаг трала в пунктах
                     int trailing_stop,            // Отступ стоплосс от уровня МА или SAR в пунктах
                     int profit_for_breakeven=15,  // Профит в пунктах для переноса стопа в безубыток
                     int breakeven_level=5,        // Уровень безубытка в пунктах
                     bool use_trail=true,          // Флаг использования трала
                     bool use_breakeven=false      // Флаг использования безубытка
                     )
   {
   int lv=StopLevel(symbol_name)+1;                // Получаем значение Stop Level по символу + 1 пункт (из отдельной функции)
   for(int i=OrdersTotal()-1; i>=0; i--) {
      if(OrderSelect(i,SELECT_BY_POS)) {
         if(OrderMagicNumber()!=magic_number)   continue;         //Если Магик не наш - идем к следующему ордеру
         if(OrderSymbol()!=symbol_name)         continue;         //Если Символ не наш - идем к следующему ордеру
         //--- покупки
         if(OrderType()==OP_BUY) {
            int    digits=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
            double point=(SymbolInfoDouble(symbol_name,SYMBOL_POINT));
            double pb=SymbolInfoDouble(symbol_name,SYMBOL_BID);
            double profit=pb-OrderOpenPrice();                    // Профит позиции в цене (без комиссий и свопов)
            //--- безубыток
            if(use_breakeven) {
               //--- если профит в цене больше заданного
               if(profit>=profit_for_breakeven*point) {
                  int err=ERR_NO_ERROR;
                  double sl=NormalizeDouble(OrderOpenPrice()+breakeven_level*point,digits);
                  if(pb-lv*point>sl && OrderStopLoss()<sl) {
                     // Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
                     // OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
                     // ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
                     //ModifyOrder(-1,sl,-1,err);
                     }
                  if(err==ERR_MARKET_CLOSED) return;
                  }
               }
            //--- трал
            if(use_trail) {
               //--- если профит в пунктах больше заданного, или изначально задан меньше ноля
               if(profit>=trailing_start*point || trailing_start==EMPTY) {
                  int err=ERR_NO_ERROR;
                  double sl=NormalizeDouble(level_of_trail-trailing_stop*point,digits);  // вычисляем новый уровень стоплосс по значению, переданному в функцию
                  //--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции
                  if(pb-lv*point>sl && OrderStopLoss()+trailing_step*point<sl) {
                     // Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
                     // OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
                     // ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
                     //ModifyOrder(-1,sl,-1,err);
                     }
                  if(err==ERR_MARKET_CLOSED) return;
                  }
               }
            }

         //--- Продажи
         if(OrderType()==OP_SELL) {
            int    digits=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
            double point=(SymbolInfoDouble(symbol_name,SYMBOL_POINT));
            double pa=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
            double profit=OrderOpenPrice()-pa;                    // Профит позиции в цене (без комиссий и свопов)
            //--- безубыток
            if(use_breakeven) {
               //--- если профит в цене больше заданного
               if(profit>=profit_for_breakeven*point) {
                  int err=ERR_NO_ERROR;
                  double sl=NormalizeDouble(OrderOpenPrice()-breakeven_level*point,digits);
                  if(pa+lv*point<sl && (OrderStopLoss()>sl || OrderStopLoss()==0)) {
                     // Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
                     // OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
                     // ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
                     //ModifyOrder(-1,sl,-1,err);
                     }
                  if(err==ERR_MARKET_CLOSED) break;
                  }
               }
            //--- трал
            if(use_trail) {
               //--- если профит в пунктах больше заданного, или изначально задан меньше ноля
               if(profit>=trailing_start*point || trailing_start==EMPTY) {
                  int err=ERR_NO_ERROR;
                  double sl=NormalizeDouble(level_of_trail+trailing_stop*point,digits);  // вычисляем новый уровень стоплосс по значению, переданному в функцию
                  //--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции
                  if(pa+lv*point<sl && (OrderStopLoss()-trailing_step*point>sl || OrderStopLoss()==0)) {
                     // Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
                     // OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
                     // ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
                     //ModifyOrder(-1,sl,-1,err);
                     }
                  if(err==ERR_MARKET_CLOSED) break;
                  }
               }
            }
         }
      }
}
//+------------------------------------------------------------------+
int StopLevel(string symbol_name) {
   int sp=(int)SymbolInfoInteger(symbol_name,SYMBOL_SPREAD);
   int lv=(int)SymbolInfoInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL);
   return((lv==0)?sp*2:lv);
   }
//+------------------------------------------------------------------+
Generell gilt: Fragen Sie, wenn Sie etwas brauchen. Oder richtig.
 
Artyom Trishkin:
Ich habe festgestellt, dass die Leute oft nach einer Schleppnetz- oder Break-even-Funktion fragen. Ich habe eine Blueprint-Funktion erstellt, mit der ein Stop auf ein bestimmtes Break-Even-Niveau verschoben und eine Stop-Position um den Wert eines Indikators nachgezogen werden kann, der seine Linien auf dem Preisdiagramm zeichnet (z. B. MA oder Parabolic), die der Funktion übergeben werden.


Generell gilt: Fragen Sie, wenn Sie etwas brauchen. Oder richtig
Hallo Artem, und was in CodeBase werden Sie es nicht platzieren? Mindestens ein weiterer korrekter Code wird vorhanden sein.
Grund der Beschwerde: