Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1672

 
Nerd Trader #:

Rimosso il codice non necessario.

Sono già totalmente disperato, ho anche aggiunto una variabile di stampa quando viene inviata a OnTick... e se è servito :) è sempre falso 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 #:

Cosa significa?

Sto solo cercando qualcuno che condivida l'esperienza di integrare un indicatore in un Expert Advisor

Per poter calcolare questi dati su diverse TF.

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

Mi chiedo se qualcuno ha un'implementazione attraverso una classe.

Sto cercando di capire la logica delle classi, sarebbe un grande aiuto per imparare.

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

Buon pomeriggio, potete aiutarmi a risolvere un problema: su una candela M15 si aprono diversi trade in fila.

Non voglio che si apra più di un trade. La logica dietro l'EA è che finché l'ordine precedente non viene chiuso, il successivo non si apre, ma a volte una serie di operazioni si apre su una candela così lunga. Si prega di consigliare cosa aggiungere nel codice per evitare questa situazione?

frammento di codice :

In bCheckOrders(), vengono enumerati non solo gli ordini aperti ma anche quelli in sospeso (MODE_TRADES).
 
Nerd Trader #:

Ehm... in iOTi in vOrderModify() sempre = 1, non è un biglietto, ma un risultato positivo dell'operazione OrderSend() cioè il valore "1".


Grazie, il codice originale non è mio, quindi non cambio nulla inutilmente. Funziona e funziona.

Questo aiuterà a risolvere il mio problema?

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

Buon pomeriggio, potete aiutarmi a risolvere un problema: su una candela M15 si aprono diversi trade in fila.

Non voglio che si apra più di un trade. La logica dietro l'EA è che finché l'ordine precedente non viene chiuso, il successivo non si apre, ma a volte una serie di operazioni si apre su una candela così lunga. Si prega di consigliare cosa aggiungere nel codice per evitare questa situazione?

frammento di codice :

Mostra OnTick()
 
Mikhail Toptunov #:
Sto solo cercando qualcuno che sia in grado di condividere l'esperienza nell'implementazione dell'integrazione degli indicatori in Expert Advisor

Per poter calcolare questi dati su diverse TF.

Mi chiedo se qualcuno ha un'implementazione attraverso una classe.

Sto cercando di capire la logica delle classi, sarebbe un grande aiuto per imparare.

rates_total = Bars
time[]      = Time[]
open[]      = Open[]
high[]      = High[]
low[]       = Low[]
close[]     = Close[]
 
MakarFX #:
Mostra OnTick()
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));
  }
 
законопослушный гражданин #:

Grazie, il codice originale non è mio, quindi non cambio nulla inutilmente. Funziona e funziona.

Questo risolve in qualche modo il mio problema?

No, mi sono sbagliato, OrderSend() restituisce un biglietto o -1, quindi non c'è niente di sbagliato.
 
законопослушный гражданин #:

Prova questo, rimuovi bCheckOrders() da OnTick() e mettilo come evidenziato.

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 #:
No, mi sono sbagliato, OrderSend() restituisce un biglietto o -1, quindi non c'è niente di sbagliato.

Ok.

Lo terrò presente per il futuro.

Motivazione: