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

 
Nerd Trader #:

Unnötiger Code wurde entfernt.

Ich bin schon total verzweifelt, habe sogar eine Druckvariable hinzugefügt, wenn sie an OnTick gesendet wird... und wenn es geholfen hat :) es ist immer falsch in OnTick


bool BESet(double sl = 0, color arrow_color = 0, string order_type = ""){
  bool order = OrderModify( OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, arrow_color );
          if(!order) {
            ResetLastError();
            Print("!Ошибка ",order_type,". Причина: ", GetLastError());
            return false;
          }
          else {
            return true;
          }
}

bool BEActivate(){
  double unrealized_profit = 0;
  color arrow_color = 0;
  string order_type = "";
  double sl = 0;
  bool is_be = false; // если объявить true, то в OnTick всегда будет возвращаться true

  if(OrdersTotal() >= 1){
    for(int i = OrdersTotal() -1; i >= 0; i--){
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue;
      if(OrderType() == OP_BUY){
        if(OrderStopLoss() > OrderOpenPrice()) continue;
        unrealized_profit = NormalizeDouble(MathAbs(OrderOpenPrice() - Ask)/Point, 0);
        if(unrealized_profit >= save_zone && Ask > OrderOpenPrice()){
          is_be = BESet(NormalizeDouble(OrderOpenPrice()+breakeven*Point,Digits), clrGreenYellow, "Бай");
          Print("BE ",is_be);
        }
      }
      if(OrderType() == OP_SELL){
        ...
        ...
      }
    }
  }
    if(!is_be){
    Print("is_be return ",is_be);
    return false;
  }
  else{
    Print("is_be return ",is_be);
    return true;
  }
}

void OnTick()
{
  
  bool is_be = BEActivate();

  if(last_time > bar.time_open){
    bar.Initialize();
    Print("is_be ",is_be); //Всегда FALSE
    ...
  }
last_time = iTime(NULL, 0, 0);
}
 
MakarFX #:

Was bedeutet das?

Ich suche jemanden, der mir seine Erfahrungen mit der Integration eines Indikators in einen Expert Advisor mitteilt.

Um diese Daten für verschiedene TFs berechnen zu können.

const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],

Ich frage mich, ob jemand eine Implementierung durch eine Klasse hat.

Ich versuche, die Logik der Klassen zu verstehen, es wäre eine große Hilfe für das Lernen.

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

Guten Tag, können Sie mir helfen, ein Problem zu lösen: Bei einer M15-Kerze werden mehrere Trades hintereinander eröffnet.

Ich möchte nicht mehr als einen Handel eröffnen. Die Logik hinter dem EA besteht darin, dass die nächste Order erst dann eröffnet wird, wenn die vorherige Order geschlossen ist, aber manchmal wird eine Reihe von Geschäften bei einer solchen langen Kerze eröffnet. Was muss in den Code eingefügt werden, um diese Situation zu verhindern?

Codeschnipsel :

In bCheckOrders() werden nicht nur offene Aufträge, sondern auch schwebende Aufträge (MODE_TRADES) aufgezählt.
 
Nerd Trader #:

Ähm ... in iOTi in vOrderModify() immer = 1, es ist kein Ticket, sondern ein positives Ergebnis der OrderSend()-Operation, d. h. der Wert "1".


Danke, der Originalcode ist nicht von mir, also ändere ich nichts unnötig. Es funktioniert und es funktioniert.

Wird dies zur Lösung meines Problems beitragen?

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

Guten Tag, können Sie mir helfen, ein Problem zu lösen: Bei einer M15-Kerze öffnen sich mehrere Trades hintereinander.

Ich möchte nicht mehr als einen Handel eröffnen. Die Logik hinter dem EA besteht darin, dass die nächste Order erst dann eröffnet wird, wenn die vorherige Order geschlossen ist, aber manchmal wird eine Reihe von Geschäften bei einer solchen langen Kerze eröffnet. Was muss in den Code eingefügt werden, um diese Situation zu verhindern?

Codeschnipsel :

OnTick() anzeigen
 
Mikhail Toptunov #:
Ich bin auf der Suche nach jemandem, der seine Erfahrungen mit der Integration von Indikatoren in Expert Advisor teilen kann.

Um diese Daten für verschiedene TFs berechnen zu können.

Ich frage mich, ob jemand eine Implementierung durch eine Klasse hat.

Ich versuche, die Logik der Klassen zu verstehen, es wäre eine große Hilfe für das Lernen.

rates_total = Bars
time[]      = Time[]
open[]      = Open[]
high[]      = High[]
low[]       = Low[]
close[]     = Close[]
 
MakarFX #:
OnTick() anzeigen
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

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

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit

  if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
      CloseOrder();
     }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
  }
 
законопослушный гражданин #:

Danke, der Originalcode ist nicht von mir, also ändere ich nichts unnötig. Es funktioniert und es funktioniert.

Löst dies mein Problem in irgendeiner Weise?

Nein, ich habe mich geirrt, OrderSend() gibt ein Ticket oder -1 zurück, also ist daran nichts auszusetzen.
 
законопослушный гражданин #:

Versuchen Sie Folgendes: Entfernen Sie bCheckOrders() aus OnTick() und setzen Sie es wie hervorgehoben.

void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

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

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit

  if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
      CloseOrder();
     }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на покупку |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenBuy()
  {
// Если нет открытых ордеров, то входим в условие
   if(bCheckOrders() == true)
     {
   // Тикет ордера
      int iOTi = 0;   
   
      iOTi = OrderSend(Symbol(), OP_BUY, LOT(), Ask, Slippage, 0, 0, "", Magic, 0, clrNONE);
   
   // Проверим открылся ли ордер
      if(iOTi > 0)
   // Есди да, то выставим уровни убытка и прибыли
         vOrderModify(iOTi);
      else
   // Если нет, то получим ошибку
      vError(GetLastError());
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на продажу |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenSell()
  {
// Если нет открытых ордеров, то входим в условие
   if(bCheckOrders() == true)
     {
   // Тикет ордера  
      int iOTi = 0;   
   
      iOTi = OrderSend(Symbol(), OP_SELL, LOT(), Bid, Slippage, 0, 0, "", Magic, 0, clrNONE);
   
   // Проверим открылся ли ордер
      if(iOTi > 0)
   // Есди да, то выставим уровни убытка и прибыли
         vOrderModify(iOTi);
      else
   // Если нет, то получим ошибку
      vError(GetLastError());
     }
  }
 
Nerd Trader #:
Nein, ich habe mich geirrt, OrderSend() gibt ein Ticket oder -1 zurück, also ist daran nichts auszusetzen.

Ja.

Ich werde das für die Zukunft im Hinterkopf behalten.

Grund der Beschwerde: