Estoy aprendiendo a escribir un asesor... - página 6

 
ALex2008 >> :

Tómate tu tiempo para leer el hilo.

Escribo allí sobre la opción

incluso si el AGENTE da una recotización ...


código de error 138 y una cuenta real.

 

Si se refiere a esta opción y se refiere a OrderModify

YuraZ писал(а) >>

допустим

получен сигнал -

на тике бъем на вход раз 5

не пробили! вышли

на втором тике после сигнала входим и долбим далше!

..entonces todavía no he crecido hasta las garrapatas))) ¿Cómo contabilizarlos 1er tick, 2do tick?

Sleep(2000); // es una espera de 2 segundos después de un error

¿Y esperar una nueva garrapata durante cuánto tiempo?


 
Talex >> :
Pruébalo así.

Ahora tengo la tarea de establecer una parada a través de OrderModify inmediatamente después de OpenSend y comprobar si esta parada existe.

Si no funcionó, no lo rastrees más, si no, cuál es el error e intenta poner... poner... y poner...)

RefreshRates();   
           double SLS = Ask+ Stop*Point;   //стоп на продажу
           Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
              if ( Modify == false)
                  {
                      Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());
                      for (int j=0 ;; j++) //пытаемся пока ДЦ не умрет)
                             {
                                SLS = SLS+ j*Point;   //увеличиваем стоп на 1 пп 
                                RefreshRates();
                                Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
                                   if ( Modify==true)
                                       break;
                                   else   
                                       Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());        
                              }
                  }
 
¿Puedes decirme cómo comprobar el estado de OrderModify, para que después de una modificación exitosa no intente modificar de nuevo y obtenga errores innecesarios?
 
bool ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) continue;

reemplazar con esto:

ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) break;

aquí:

1. por qué definir el tipo de variable innecesariamente - este es un error que debería aparecer durante la compilación

2. en lugar de continue - para pasar a una nueva iteración (es decir, a un nuevo intento de modificación), utilizar break - salida del bucle (e infinito, que no es bueno)

 
Xupypr >> :

1. por qué definir el tipo de variable innecesariamente - este es un error que debería aparecer en tiempo de compilación

fijo)

2. En lugar de continuar - iteración saltando a una nueva iteración (es decir, un nuevo intento de modificación), utilice break - salida del bucle

>> Gracias.

...y es interminable, lo cual no es bueno...

infinito porque es necesario detenerlo...

Y si hago un par de intentos y se rechaza por alguna razón y el precio va muy en contra de la posición durante este tiempo... ¿Qué hacer entonces?

 

Errores en el registro:

open #1 sell 0.01 EURUSD ok
modify #1 sell 0.01 EURUSD ok
Error al intentar establecer un stop para SEL, código de error =0
stop loss #1
open #2 sell 0.01 EURUSD ok
modify #2 sell 0.01 EURUSD ok
Error al intentar establecer un stop para SEL, código de error =0
stop loss #2
open #3 sell 0.01 EURUSD ok
modify #3 sell 0.01 EURUSD ok
Error al intentar establecer un stop para SEL, código de error =0

introduzca VENDER

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




modificar VENDER





void ModifySL() 
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()==0) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
                               
            else
                  RefreshRates();   
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()== 0) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         } 
   }




 
ALex2008 >> :

Si se refiere a esta opción y se refiere a OrderModify

..entonces todavía no he crecido hasta las garrapatas))) ¿Cómo contabilizarlos 1er tick, 2do tick?

Sleep(2000); // esto es una espera de 2 segundos después de un error

¿Y cuánto tiempo hay que esperar para una nueva garrapata?


en cada momento

se llama

START()

{

}

---

tenga en cuenta que si está en la función START durante mucho tiempo

puede perder una o más garrapatas

Por ejemplo, si entras en una función START y te quedas sentado durante 10 minutos, es lógico que aparezcan garrapatas, pero no las cogerás

aunque es posible que no te salga una garrapata por la noche durante mucho tiempo

---

por lo que sentarse en la función START durante mucho tiempo es malo para la captura de garrapatas (si son importantes para usted)

escribir programas económicos con un mínimo de ciclos y retrasos

---

 
YuraZ >> :

...ten en cuenta que si estás mucho tiempo en la función START

es posible que se pierda una o más garrapatas

Por ejemplo, si has entrado en la función START y llevas 10 minutos, es lógico que vengan ticks pero no los cogerás

aunque es posible que no te salga una garrapata por la noche durante mucho tiempo

---

por lo que sentarse en la función START durante mucho tiempo es malo para la captura de garrapatas (si son importantes para usted)

Escribir programas económicos con un mínimo de ciclos y retrasos.

---

Si utiliza la función RefreshRates() antes de modificar o establecer una orden, sólo actualiza el estado fuera de Start(), es decir, los ticks?

¿Lo he entendido bien?

 

Aquí está la versión final de la apertura y la modificación de la pose para la crítica.

¿Los "+" y "-" de esta opción?

venta de apertura

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




dejar de modificar





void ModifySL()
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  bool Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
            else
               {
                  RefreshRates();   
                  Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         }     
   }
Razón de la queja: