[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 312

 
GarKain:
Alguém pode explicar como abrir um pedido em qualquer momento de um bar e abrir o próximo pedido somente no próximo bar?

Devemos percorrer a lista de pedidos. Se o tempo de abertura da próxima ordem for maior ou igual ao tempo de abertura da barra atual (Tempo[0]), devemos definir a bandeira proibindo a abertura de ordens no par de moedas atual. No próximo castiçal, o laço detectará que não existe tal ordem e não colocará uma proibição, ou seja, limpará a bandeira que proíbe a abertura de ordens.
 
drknn:

Fazemos loop na lista de pedidos. Se o tempo de abertura da próxima ordem for maior ou igual ao tempo de abertura da barra atual (Tempo[0]), então definimos a bandeira que proíbe a abertura de ordens neste par de moedas.
Muito obrigado
 
drknn, muito obrigado pelo esclarecimento. Vou guardá-lo ;)
 
GarKain:
Muito obrigado.


Se o código só funciona em um par de moedas, então ponha uma linha para cortar as ordens de outros pares

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


Se o código só funciona em um par de moedas, então defina uma linha para descartar as ordens de outros pares

pergunta. se o código funciona em vários pares de moedas e simultaneamente em vários períodos de tempo, você pode colocar números mágicos diferentes neles e fazer peneiramento nele?
 

Você pode.

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

Você pode.



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

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


isto é correto?

 
GarKain:

bool Times=verdadeiro;
se (OrderTotal()>0){
for(int g=OrdensTotal()-1; g>=0; g--){
data/hora t;
OrderSelect(g,SELECT_BY_POS);
se (OrderMagicNumber()!=MagicNumber){continuar;}
if (t<OrderOpenTime() ||| g==OrdersTotal()-1) t=OrderOpenTime();

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


isto é correto?


Não há necessidade de declarar uma variável dentro do laço em cada iteração do laço.

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 (OrderTotal()>0){
for(int g=OrdersTotal()-1; g>=0; g--){
datetime t;
OrderSelect(g,SELECT_BY_POS);
if (OrderMagicNumber()!=MagicNumber){continue;}
if (t<OrderOpenTime() ||| g==OrdersTotal()-1) t=OrderOpenTime();

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


isto é correto?

não notar o erro.

bool Times=true;
datetime t=Time[1];
if (OrderTotal()>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;}}}}


isto é correto?

 
drknn:


Não. Você não precisa declarar uma variável dentro do laço a cada iteração.

Hmmm... obrigado