Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1672

 
Nerd Trader #:

Removido o código desnecessário.

Já estou totalmente desesperado, até acrescentei uma variável de impressão quando ela é enviada para a OnTick... e se isso ajudou :) é sempre falso no 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 #:

O que isso significa?

Estou apenas procurando alguém para compartilhar a experiência de integrar um indicador em um Expert Advisor

Para poder calcular estes dados em 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[],

Será que alguém tem uma implementação através de uma aula?

Estou tentando entender a lógica das aulas, seria uma grande ajuda para o aprendizado.

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

Boa tarde. Você pode me ajudar a resolver um problema. em um castiçal M15, vários ofícios abrem em uma fila.

Não quero mais do que uma profissão a ser aberta. A lógica por trás da EA é que até que a ordem anterior seja fechada, a próxima não será aberta, mas às vezes uma série de acordos é aberta em um castiçal tão longo. Por favor, informe o que acrescentar ao código para evitar esta situação.

código snippet :

Em bCheckOrders(), não somente as ordens abertas mas também as ordens pendentes (MODE_TRADES) são numeradas.
 
Nerd Trader #:

Um... em iOTi em vOrderModify() sempre = 1, não é um bilhete, mas um resultado positivo da operação OrderSend(), ou seja, valor "1".


Obrigado. O código original não é meu, portanto não mudo nada desnecessariamente. Funciona e funciona.

Isso vai ajudar a resolver meu problema?

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

Boa tarde. Você pode me ajudar a resolver um problema. em um castiçal M15, vários ofícios abrem em uma fila.

Não quero mais do que uma profissão a ser aberta. A lógica por trás da EA é que até que a ordem anterior seja fechada, a próxima não será aberta, mas às vezes uma série de acordos é aberta em um castiçal tão longo. Por favor, informe o que acrescentar ao código para evitar esta situação.

código snippet :

Mostrar OnTick()
 
Mikhail Toptunov #:
Estou apenas procurando alguém que seja capaz de compartilhar experiência na implementação da integração de indicadores no Expert Advisor

Para poder calcular estes dados em diferentes TFs.

Será que alguém tem uma implementação através de uma aula?

Estou tentando entender a lógica das aulas, seria uma grande ajuda para o aprendizado.

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));
  }
 
законопослушный гражданин #:

Obrigado. O código original não é meu, portanto não mudo nada desnecessariamente. Funciona e funciona.

Isto resolve meu problema de alguma forma?

Não, eu estava errado, OrderSend() devolve um bilhete ou -1, então não há nada de errado com isso.
 
законопослушный гражданин #:

Tente isto, remova bCheckOrders() da OnTick() e coloque-o como destacado.

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 #:
Não, eu estava errado, OrderSend() devolve um bilhete ou -1, então não há nada de errado com isso.

Certo.

Terei isso em mente para o futuro.

Razão: