Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1672

 
Nerd Trader #:

Se ha eliminado código innecesario.

Ya estoy totalmente desesperado, incluso he añadido una variable de impresión cuando se envía a OnTick... y si ayuda :) siempre es falso en 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 #:

¿Qué significa?

Sólo busco que alguien comparta la experiencia de integrar un indicador en un Asesor Experto

Para poder calcular estos datos en diferentes TFs.

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

Me pregunto si alguien tiene una implementación a través de una clase.

Estoy tratando de entender la lógica de las clases, sería una gran ayuda para el aprendizaje.

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

Buenas tardes, me pueden ayudar a resolver un problema. en una vela M15, se abren varias operaciones seguidas.

No quiero que se abra más de una operación. La lógica detrás del EA es que hasta que no se cierre la orden anterior, la siguiente no se abrirá, pero a veces una serie de operaciones se abre en una vela tan larga. Por favor, indíqueme qué debo añadir en el código para evitar esta situación.

fragmento de código :

En bCheckOrders() se enumeran no sólo las órdenes abiertas sino también las pendientes (MODE_TRADES).
 
Nerd Trader #:

Um... en iOTi en vOrderModify() siempre = 1, no es un ticket, sino un resultado positivo de la operación OrderSend() es decir, el valor "1".


Gracias. El código original no es mío, así que no cambio nada innecesariamente. Funciona y funciona.

¿Ayudará esto a resolver mi problema?

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

Buenas tardes, me pueden ayudar a resolver un problema. en una vela M15, se abren varias operaciones seguidas.

No quiero que se abra más de una operación. La lógica detrás del EA es que hasta que no se cierre la orden anterior, la siguiente no se abrirá, pero a veces una serie de operaciones se abre en una vela tan larga. Por favor, indíqueme qué debo añadir en el código para evitar esta situación.

fragmento de código :

Mostrar OnTick()
 
Mikhail Toptunov #:
Sólo estoy buscando a alguien que pueda compartir su experiencia en la implementación de la integración de indicadores en el Asesor Experto

Para poder calcular estos datos en diferentes TFs.

Me pregunto si alguien tiene una implementación a través de una clase.

Estoy tratando de entender la lógica de las clases, sería una gran ayuda para el aprendizaje.

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

Gracias. El código original no es mío, así que no cambio nada innecesariamente. Funciona y funciona.

¿Resuelve esto mi problema de alguna manera?

No, me equivoqué, OrderSend() devuelve una entrada o -1, así que no hay nada malo en ello.
 
законопослушный гражданин #:

Prueba esto, quita bCheckOrders() de OnTick() y ponlo como resaltado.

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, me equivoqué, OrderSend() devuelve una entrada o -1, así que no hay nada malo en ello.

De acuerdo.

Lo tendré en cuenta para el futuro.

Razón de la queja: