[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 193

 
Diubakin:
Se você fizer isso, todas as adversidades devem desaparecer.

Para remover a condição "extra", você pode fazer isso:

    int i, ot = OrdersTotal();
    double min = 1000.0;
    int min_ticket=0;
    for (i=ot - 1; i>= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderType()!=OP_BUY) if (OrderType()!=OP_SELL) continue;
        if (min <= OrderLots()) continue;
        min = OrderLots();
        min_ticket=OrderTicket();
    }
 
artmedia70:

Como assim... Baseado em Igor Kim fez algo... Apenas uma de suas características... o resto é o mesmo...

algo assim, acho eu:

E nós a chamamos assim:

para contar Comprar e contar Vender no símbolo atual, com Magic

Artyom, é claro que começo por Kim, removendo cheques desnecessários para mim e acrescentando tarefas necessárias para mim. Eu não quero reinventar a roda! Obrigado pela correção, serei mais corajoso para remover desnecessário! E não preciso verificar o mágico e o símbolo, porque às vezes intervenho "com minhas mãos" e não antes da multimoeda para mim ainda!
 
TarasBY:

Para remover a condição "extra", você pode fazer o seguinte



Igor, você está certo. É mais legível dessa forma...
 
borilunad:
Artyom, claro que venho de Kim, removendo verificações desnecessárias e acrescentando as tarefas de que preciso. Não para reinventar uma bicicleta! Obrigado pela correção, serei mais corajoso para remover desnecessário! E não preciso verificar o mágico e o símbolo, pois às vezes intervenho "manualmente" e não antes da multimoeda para mim ainda!

Você deve verificar se (OrderMagicNumber()==0) ... Este é um cheque para "manual".

Se quisermos interferir com outros EAs que trabalham com outro símbolo, podemos remover a verificação para OrderSymbol().

Deixei as verificações mínimas necessárias para trabalhar em um único personagem, com suas próprias posições/ordens. Se você também quiser tocar o que "pegas", então você precisa acrescentar um cheque para magic==0.

 
artmedia70:

Então você deve fazer uma verificação se (OrderMagicNumber()==0) ... é um cheque para "manual".

Se quisermos interferir com outros EAs trabalhando com outro símbolo, podemos remover a verificação do OrderSymbol().

Deixei as verificações mínimas necessárias para trabalhar em um símbolo, com suas próprias posições/ordens. Se você também quiser tocar "à mão", então você precisa acrescentar um cheque para magik==0.

Estou autorizado a fazer isso como está! Mas vou tomar nota, especialmente com != e o contínuo não abranda em nada! Obrigado!
 
solnce600:

Muito obrigado por sua ajuda. Tudo está bem. Mas......

1. Em alguns dos cinco minutos, mais de 1 pedido é aberto.

2. Algumas ordens são fechadas por ordens de parada cujo preço é diferente daquele prescrito no código.


Bem, vamos lá, então tudo é simples - faça o mesmo cheque nas ordens fechadas) E sobre o preço de fechamento- desculpe, é definido corretamente, e então o servidor a que preço realmente fechá-lo.
int start()

{

 double Price=iOpen (Symbol (),PERIOD_M5,0)+300*Point;        
 double SL=NormalizeDouble (Price-300*Point, Digits);         
 double TP=NormalizeDouble (Price+150*Point, Digits);    
 
 int last_order_bar = 0;
 int ot = OrdersTotal();

 if (ot>0) //если есть ордера в рынке
 {
   if (OrderSelect (ot-1,SELECT_BY_POS)) //выбрали последний ордер
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL) //проверили тип
         last_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ()); //запомнили, на каком 5-минутном баре открыт последний ордер (если он есть)
 }
 
 int last_hist_order_bar = 0;
 int oht = OrdersHistoryTotal();

 if (oht>0) //если есть ордера в рынке
 {
   if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY)) //выбрали последний закрытый ордер
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL) //проверили тип
         last_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ()); //запомнили, на каком 5-минутном баре открыт последний закрытый ордер (если он есть)
 }
 
 if (ot==0 || last_order_bar>0) //если ордеров нет либо последний открыт не на текущем баре
    if (oht==0 || last_hist_order_bar>0) //если закрытых ордеров нет либо последний из закрытых был открыт не на текущем баре
       if (Bid>=Price)                       //если текущая цена доползла до цены открытия
          int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP );

}
 
alsu:
Bem, é fácil fazer a mesma verificação nos pedidos fechados) E sobre o preço de fechamento - desculpe, ele é definido corretamente, e então depende do servidor a que preço ele pode ser fechado.

Muito obrigado. Desculpe pelo inconveniente.
 
alsu:
E quanto ao preço de fechamento - desculpe, ele é definido corretamente, e então depende do servidor a que preço ele realmente fechará.

Muito obrigado novamente por toda a sua ajuda. Mas.....

Eu abri apenas um pedido durante o período de um ano, ou seja, o primeiro pedido que encontrei.

E há muito mais castiçais com parâmetros para abrir uma ordem neste período.

http://clip2net.com/s/2ToEo


Não poderei fechá-lo. Obrigado.

 
solnce600:

Muito obrigado novamente por toda a sua ajuda. Mas.....

Eu abri apenas um pedido durante o período de um ano, ou seja, o primeiro pedido que encontrei.

E há muito mais castiçais com parâmetros para abrir uma ordem neste período.

http://clip2net.com/s/2ToEo


Obrigado.


Corrigir meu erro de digitação - a segunda vez

 if (oht>0) //если есть ордера в рынке
 {
   if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY)) //выбрали последний закрытый ордер
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL) //проверили тип
         last_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ()); //запомнили, на каком 5-минутном баре открыт последний закрытый ордер (если он есть)
 }

Eu preciso de

last_hist_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ());
 
alsu:

Corrigir meu erro de digitação - a segunda vez

É suposto ser.


OK. Muito obrigado.