AJUDE QUEM PUDER!!!

 

Preso em um problema

for(int i = 0; i < OrdersTotal(); i++)
  {
    
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;


O seletor encontra uma ordem se houver uma posição aberta, mas se não houver posições abertas, como posso encontrá-la? o seletor ainda mostrará a última posição fechada...
 
sllawa3:

Preso em um problema


O selecionador encontra uma ordem se estiver aberta, mas se não houver posições abertas, como posso encontrá-la? O selecionador ainda mostrará a última posição fechada...
com a bandeira
MODE_TRADES
o "Selector" não mostrará posições fechadas, somente as abertas. Se houver zero posições abertas o laço nem sequer começará porque a condição será falsa
 
Techno:
com a bandeira
O "seletor" não mostrará posições fechadas, apenas posições abertas. Se houver zero posições abertas, o laço nem sequer começará, pois a condição será falsa.

sei que não vai começar e vai salvar a última posição já fechada... foi o que escrevi... você pode verificar as posições abertas usando uma ordem Select, mas como devo verificar a ausência de posições?
 
sllawa3:

Exatamente, não vai começar e vai salvar a última pose já fechada... é o que diz...
Eu não entendo o que diz. Mesmo agora, o que você quer dizer com "salvar uma posição fechada"? Se estamos falando de calcular posições, como só posso adivinhar, todas as variáveis (para armazenar o número de ordens) devem ser zeradas no início da função inicial. Isto é, antes do loop. Se permanecerem vazias após o loop, significa que não há posições.
 
um pedaço de código no início do tópico... se não houver posição então a DS permanece =1 até aparecer uma nova ordem... mesmo que a ordem tenha fechado... apenas a seleção e não comece... o que não é para entender...
 
Techno:
algo não está claramente escrito. Mesmo agora, o que significa "manter a posição fechada"? Se estamos falando de calcular posições, como só posso adivinhar, então todas as variáveis (para armazenar o número de ordens) devem ser zeradas no início da função de início. Isto é, antes do loop. Se permanecerem vazias após o loop, significa que não há posições.

DS é inicialmente escrito como int = 0 antes do loop
 
Techno:


por isso não será reiniciado se o ciclo não começar, e não começará se não houver poses
 
sllawa3:

DS é inicialmente prescrito como int = 0 antes do ciclo
Ah, bem, se é prescrito e 0 é atribuído, então não pode ser um problema, senão por que seria igual a um? É atribuído zero na função de início ou acima?
 
acima
 
Pode não haver um problema, mas há... tente e veja por si mesmo
 
Que tal isso?
DS=0;
for(int i = 0; i < OrdersTotal(); i++)
  {
    if (DS==0) DS=-1;
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;
}
if (DS==0) // поз никаких нет
if (DS==-1) // позы есть, но нету БАЙ
if (DS==1) // есть БАЙ