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

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

hecho. no se diferencia en absoluto de la revista anterior.

ni errores, ni nada.

No debería haber ningún error, muestra el registro
 
for(int i = 0; i <= OrdersTotal(); i++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            return(false);

¿No necesitas soportes para el bucle? Parece que sólo cuando no hay más de una línea no se necesitan.

UPD:
Ah lo tengo, hay una línea.

 
MakarFX #:
No debería haber ningún error, muestra el registro

Aquí están las últimas páginas del libro de registro de MT4.

¿es necesario este registro?

Archivos adjuntos:
0w11cw.txt  30 kb
 
Oh, lo siento. Se ha confundido la comparación y la asignación. Todo está bien ahora. Me he vuelto loco desde que me senté a escribir. Estoy escribiendo mal y estresándome, y mi cabeza no funciona en absoluto, aunque eso ya lo sabía, claro.
 
законопослушный гражданин #:

Aquí están las últimas páginas del libro de registro de MT4.

¿es necesario este registro?

Aquí está la respuesta en su registro)

La función bCheckOrders() después de abrir una orden da como resultado que no hay órdenes, por lo que siguen abriendo

 
pribludilsa #:
Y mi cabeza no funciona en absoluto, aunque ya lo sabía, por supuesto.

Tienes una forma divertida de decirlo)))

 
MakarFX #:

Tienes una forma divertida de decirlo)))

Es decir, sabía cómo escribir la asignación y la comparación, pero se confundió de todos modos. Confundido.
 
pribludilsa #:
Es decir, sabía cómo escribir la asignación y la comparación, pero aún así se confundía. Un lío.

Eso no es lo que quiero decir...

pribludilsa #:
y mi cabeza no funciona para nada, aunque eso lo sabía por supuesto.

 
MakarFX #:

Aquí está la respuesta en su registro)

La función bCheckOrders() después de abrir una orden da como resultado que no hay órdenes, por lo que sigue abriendo

Oh, Dios mío. ¿Dónde dice eso?

¿quizás no he leído bien el registro?

La funciónbCheckOrders()después de abrir una orden imprime que no hay ninguna orden, por lo tanto la apertura continúa - por void OnTick() - entiendo que esto no es cierto.

hasta que se cierre el pedido bCheckOrders() - no puede dar a conocer que no hay ningún pedido.

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

Oh, mierda. ¿Dónde dice eso?

¿quizás no he leído bien el registro?

La funciónbCheckOrders()después de abrir una orden da como resultado que no hay ninguna orden, por lo tanto la apertura continúa - por void OnTick() - entiendo que esto no es cierto.

hasta que se cierre la orden bCheckOrders()-no puede mostrar la ausencia de una orden.

bCheckOrders() no funciona correctamente.

Ya te escribí una función para el recuento de órdenes.

Hazlo así y debería funcionar.

En lugar de bCheckOrders(), ponga esta función

//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return(cnt);
  }

y en OnTick(), en lugar de bCheckOrders(), escriba esto

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

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==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));
  }