[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 312

 
GarKain:
¿Puede alguien explicar cómo abrir una orden en cualquier momento de una barra y abrir la siguiente orden sólo en la siguiente barra?

Deberíamos recorrer la lista de pedidos. Si la hora de apertura de la siguiente orden es mayor o igual a la hora de apertura de la barra actual (Time[0]), debemos poner la bandera que prohíbe la apertura de órdenes en el par de divisas actual. En la siguiente vela, el bucle detectará que no existe tal orden y no colocará una prohibición, es decir, borrará la bandera que prohíbe la apertura de órdenes.
 
drknn:

Hacemos un bucle con la lista de pedidos. Si la hora de apertura de la siguiente orden es mayor o igual que la hora de apertura de la barra actual (Time[0]), entonces se establece la bandera que prohíbe la apertura de órdenes en este par de divisas.
Muchas gracias
 
drknn, muchas gracias por la aclaración. Me lo quedo ;)
 
GarKain:
Muchas gracias.


Si el código sólo funciona en un par de divisas, entonces ponga una línea para cortar las órdenes de otros pares

if(OrderSymbol()!=Symbol()){continue;}
 
drknn:


Si el código sólo funciona con un par de divisas, establezca una línea para descartar las órdenes de otros pares

pregunta. si el código funciona en varios pares de divisas y simultáneamente en varios marcos de tiempo, ¿se pueden poner diferentes números mágicos y realizar el cribado en él?
 

Puedes hacerlo.

if(OrderMagicNumber()!=MAGIC) { continue;}
 
drknn:

Puedes hacerlo.



bool Times=true;
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
datetime t;
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continue;}
si (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=Time[0]) Times=false;}}


¿es esto correcto?

 
GarKain:

bool Times=true;
if (OrdersTotal()>0){
for(int g=Total de Pedidos()-1; g>=0; g--){
datetime t;
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continuar;}
if (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=Time[0]) Times=false;}}


¿es esto correcto?


No es necesario declarar una variable dentro del bucle en cada iteración del mismo.

bool Torg=true;
for(int i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
     if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) { continue;} 
     if(OrderOpenTime()>=Time[0]){
       Torg=false;
     }
   }  
 }


// теперь используем результат работы цикла
// Если есть сигнал и торг разрешён, то открываем ордер
 
GarKain:

bool Times=true;
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
datetime t;
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continue;}
si (t<OrderOpenTime() || g==OrdersTotal()-1) t=OrderOpenTime();

if (t>=Time[0]) Times=false;}}


¿es esto correcto?

no se nota el error.

bool Times=true;
datetime t=Time[1];
if (OrdersTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continue;}
if (t<OrderOpenTime()) t=OrderOpenTime();

if (t>=Time[0]) Times=false;}}


¿es esto correcto?

 
drknn:


No es necesario declarar una variable dentro del bucle en cada iteración.

Hmmm... gracias
Razón de la queja: