Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 672

 
TarasBY:

No he trabajado con esta función. Se supone que si el terminal selecciona un carácter una vez, el siguiente intento de seleccionar el mismo carácter puede devolver falso. Intenta ignorar la comprobación de retorno de esta función.

Resulta que SymbolSelect("AUDUSD", true) devuelve true sólo si AUDUSD no está en MarketWatch - es decir, cuando el par se añade a MarketWatch. Una vez que el par está en MarketWatch, las siguientes llamadas devuelven false.

Este comportamiento no coincide en absoluto con el manual de esta función.

Tuve que usar una función escrita por mí mismo que escanea todos losSymbolName(i, true) para i=0...SymbolsTotal(true).

 
Mr.Profit:

Resulta que SymbolSelect("AUDUSD", true) devuelve true sólo si AUDUSD no está en MarketWatch - es decir, cuando el par se añade a MarketWatch. Una vez que el par está en MarketWatch, las siguientes llamadas devuelven false.

Este comportamiento no coincide en absoluto con el manual de esta función.

Algo me dice que podemos prescindir de SymbolSelect().
 
TarasBY:
Algo me dice que puedes prescindir de SymbolSelect().

Sí, acabo de actualizar mi post anterior
 
borilunad:

¿Cuál es el otro, o ya deberíamos estar haciendo una pata en este?


Master Forex

 
laveosa:
Me tomó 4 meses para hacer un búho en alpari..... ¡¡¡¡¡el código de nano quanto es muy jodido de tiempo y no pequeño..... y ahora todo es !!!!! es una pena .... No estoy seguro de qué hacer con él.

Tercer búho y sigue el mismo error, me alegro de que el problema no sea el código :)
 
La cuestión esque he puesto un nuevo "No" ( esun cable de fibra de vidrio de alta velocidad con una velocidad de descarga de 7mb por segundo.) y después me pasó lo mismo con Alpari, pero con Master Forex todo está bien y Admeral también ......... aquí hay otro matiz, el broker se instala en la unidad D:) al reinstalar el sistema operativo no instalé uno nuevo y utilicé el antiguo .... ¿tal vez debería instalarlo?
 
laveosa:


Master Forex


Gracias, voy a echar un vistazo.
 
borilunad:

Gracias, voy a echar un vistazo.

No estoy haciendo campaña, sólo respondiendo a una pregunta :)
 

Hola a todos. Empecé a escribir EAs no hace mucho tiempo. Me he enfrentado a un problema aparentemente elemental, que no puedo resolver. Por favor, ayuda.

El problema. En un nuevo tick pierdo el valor de una variable.

Breve descripción. Asigne a alguna variable el valor de retorno de la función OrderSend() y salga utilizando el comando return. En el siguiente tick el valor de la variable se hace igual a cero.

El elemento clave del código fuente. El código fuente completo a continuación.

if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red);
Alert ("Valor asignado a la variable ticket_sell ", ticket_sell);
volver;
}
}

Alerta ("Posición existente = ", position_exists, "Orden de compra ", ticket_buy, "Orden de venta ", ticket_sell);

Resultado.

La captura de pantalla muestra que la posición fue abierta con éxito y el ticket de la orden fue memorizado en la variable ticket_sell. Sin embargo, la variable ticket_sell se convierte en cero en el siguiente tick. Y no puedo modificar/borrar el pedido en el ticket.

// Простой параболик. Переворотная стратегия.
// В условиях, когда в терминале уже есть открытые позиции по другим инструментам.

input double TakeProfit    =2500;
input double StopLoss      =400;
input double Lots          =1;
input double TrailingStop  =100;

input double Parameter1    =0.02; // Параметры индикатора PSAR
input double Parameter2    =0.2;
   
void OnTick()
{
int position_exists; // Переменная, принимающая значения 0 или 1. Указывает, открыта ли позиция по интструменту EURUSD

// Занесение в переменные значений индикатора на последнем и предпоследнем закрывшихся барах  
double SAR_Prev=iSAR(NULL,0,Parameter1,Parameter2,1);
double SAR_Prev2=iSAR(NULL,0,Parameter1,Parameter2,2);
// Занесение в переменные цен закрытия на последнем и предпоследнем барах
double LastClose=iClose(NULL,0,1);
double LastClose2=iClose(NULL,0,2);

  
//---------------------------------------------------------------------     
// Блок, который определяет, открыта ли позиция по инструменту EURUSD
// путём перебора всех открытых ордеров терминала в цикле. 
// Если позиция открыта, то переменной position_exists будет присвоено значение 1
int cnt;
string sym;
int type;

int total=OrdersTotal();
position_exists=0;
for (cnt=0; cnt<=total-1; cnt++)
   {
    bool select=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    sym=OrderSymbol();
    type=OrderType();
    if (sym=="EURUSD" && (type==1 || type==0)) 
      {
       position_exists=1;
       break;
      }
   }     
//--------------------------------------------------------------------- 
// Если позиция по EURUSD не существует, то проверяем условия открытия сделки  
   if(position_exists==0)
      {
       if (SAR_Prev<LastClose && SAR_Prev2>LastClose2)
         {
          int ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point," ",111,0,Blue);
          Alert ("Присвоили значение пременной ticket_buy ", ticket_buy);
          return;
         }
         
       if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
         {
          int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point," ",111,0,Red);
          Alert ("Присвоили значение пременной ticket_sell ", ticket_sell);
          return;
         }
      }
      
   Alert ("Существование позиции = ", position_exists, " Ордер на покупку ", ticket_buy, " Ордер на продажу ", ticket_sell);
//--------------------------------------------------------------------- 
// Если позиция по EURUSD существует, то проверяем условия закрытия позиции  
   if (position_exists==1)
      {
       if (ticket_sell==0) // Если открытой позиции на продажу нет, то выбираем открытый ордер на покупку по тикету
         {bool select_buy=OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES);}
         
       if (ticket_buy==0) // Если открытой позиции на покупку нет, то выбираем открытый ордер на продажу по тикету
         {bool select_sell=OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES);}
         
       
       if(OrderType()==OP_BUY) 
         {
          if(SAR_Prev>LastClose && SAR_Prev2<LastClose2) // Проверяем уловия для закрытия длинной позиции
              {
               bool close_buy=OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet);
               return;
              }
         }
        
        
        if(OrderType()==OP_SELL)
         {
          if(SAR_Prev<LastClose && SAR_Prev2>LastClose2) // Проверяем уловия для закрытия короткой позиции
              {
               bool close_sell=OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet);
               return;
              }
          } 
       }
} 

 
Sergey71:

Hola a todos. Empecé a escribir EAs no hace mucho tiempo. Me he enfrentado a un problema aparentemente elemental, que no puedo resolver. Por favor, ayuda.

El problema. En un nuevo tick pierdo el valor de una variable.

Breve descripción. Asigne a alguna variable el valor de retorno de la función OrderSend() y salga utilizando el comando return. En el siguiente tick el valor de la variable se hace igual a cero.

El elemento clave del código fuente. El código fuente completo a continuación.

if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red);
Alert ("Valor asignado a la variable ticket_sell ", ticket_sell);
volver;
}
}

Alerta ("Posición existente = ", position_exists, "Orden de compra ", ticket_buy, "Orden de venta ", ticket_sell);

Resultado.

La captura de pantalla muestra que la posición fue abierta con éxito y el ticket de la orden fue memorizado en la variable ticket_sell. Sin embargo, la variable ticket_sell se convierte en cero en el siguiente tick. Y no puedo modificar/borrar el pedido en el ticket.


Para no perder el valor, necesitamos una variable global, poner su declaración fuera deOnTick() o hacerla estática