[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 125

 
hoz:



Tenho, portanto, um cheque para este caso:

Se parada - nova parada (em b.u.) não é igual a zero... então modificamos... Caso contrário, não modificamos. É por isso que não está claro para mim como isto acontece. Afinal, entendo que preciso verificar a igualdade entre as paradas passadas e as novas paradas e já o fiz.

Veja aqui como eu verifico por cima e por baixo quando arrasto sem erro para uma bai:

          if(OrderStopLoss() > OrderOpenPrice())
          {
            if(NormalizeDouble(Bid-OrderStopLoss()-plus*tral,Digits) > prev)
            if(Bid > NormalizeDouble(OrderStopLoss()+plus*tral+prev,Digits))
            {
              SL = NormalizeDouble(OrderStopLoss()+plus*part*tral,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Blue);return(0);
          } }

Eu posso dar a função ModifyOrder(), bom para todas as modificações de ordem e posição.

 
Vinin:

Edite este código para que ele não pareça ter sido invadido.
Eu não entendo.
Como editá-lo? O que você quer dizer?
 
borilunad:
Eu aconselharia a modificá-la não por barras, mas por tantos pips. Se necessário, é para isto que servem os recursos. E o erro "nenhum erro" aparece quando o preço é repetido para uma modificação que já existe. Portanto, você tem que ir passo a passo, como eu o aconselhei no início.


O B.U. é, naturalmente, desenhado por pips. Eu queria chamar a função de U.B. a cada tic ou na abertura do bar, por exemplo. Mas isso seria uma bobagem. O preço pode saltar muito por barra. Então, a chamada será semelhante à do tickwise, certo? Estava apenas pensando, talvez seja necessário acrescentar alguma condição, para que não seja chamada a cada carrapato. Acho que devemos comparar o STOP atual e o que vai ser definido, mais ou menos...

Em geral. Que coisa estranha a se fazer.

Acrescentei uma condição para começar e foi assim que funcionou:

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }

Agora não há erros.

O que eu não entendo é que a função MovingStopLossToBU() em si muda somente se a parada não for igual a Stop Loss:

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
    if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
    {
       Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
    }
Como você o entende então?
 
Boa noite, você poderia me dizer como colorir as velas acima da média MA(10) em verde e abaixo em vermelho?
 
hoz:


O B.U. é, naturalmente, desenhado por pips. Eu queria chamar a função de U.B. a cada tic ou na abertura do bar, por exemplo. Mas isso seria uma bobagem. O preço pode saltar muito por barra. Então, a chamada será semelhante à do tickwise, certo? Estava apenas pensando, talvez seja necessário acrescentar alguma condição, para que não seja chamada a cada carrapato. Acho que devemos comparar o STOP atual e o que vai ser definido, mais ou menos...

Em geral. Que coisa estranha a se fazer.

Acrescentei uma condição para começar e foi assim que funcionou:

Agora não há erros.

O que eu não entendo é que a funçãoMovingStopLossToBU() em si muda somente se a parada não for igual a Stop Loss:

Como você o entende então?

Em seu exemplo, quando a parada é zero, isso significa que você acabou de abrir uma posição sem uma parada. E eu lhe dei o caso quando você já está no breakeven.

Mas veja acima, eu dei a você minha rede de arrasto sem romper o gelo! E eu posso lhe dar a função.

 
agat8430:
Eu não entendo.
Como editá-lo ? como entendê-lo ?
Então você veio para o lugar errado se não entendeu. Estude o que você não entende, você vai perguntar. E se você não entende nada, você não precisa disso.
 
borilunad:
Veja acima, eu lhe dei minha rede de arrasto livre de erros! E eu posso lhe dar a função.


Eu não vi sua resposta quando escrevi. Vou dar uma olhada agora.

Mas em geral, eu ficaria feliz em ver sua função de modificação, talvez eu aprenda algo novo para mim mesmo.

 
borilunad:

Em seu exemplo, quando a parada é zero, isso significa que você acabou de abrir uma posição sem uma parada. E eu lhe dei o caso quando já estava no ponto de equilíbrio.

Veja acima, eu dei a você minha rede de arrasto sem nenhum ponto de equilíbrio! E eu posso lhe dar a função.


Não, não sem uma parada. Eu só afixei uma parte dela. Aqui está a minha função de equilíbrio:

//+-------------------------------------------------------------------------------------+
//| Перевод в б.у. рыночных ордеров                                                     |
//+-------------------------------------------------------------------------------------+
void MovingStopLossToBU()
{
    double priceBU;
    int type = OrderType();
    for (int i=OrdersTotal() - 1; i>=0; i--)
    {
        if (!OrderSelect(i,SELECT_BY_POS)) continue;
        if (i_magic != -1) if (OrderMagicNumber() != i_magic) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (OrderType() > 1) continue;
        
        RefreshRates();
        
        if (type == 0)
        {
           double price = Ask;
           int li_cmd = 1;
        }
        else
        {
           price = Bid;
           li_cmd = -1;
        }

           if (li_cmd * (price - OrderOpenPrice()) >= i_triggerForBU * pt)
           {
             priceBU = ND(OrderOpenPrice() + li_cmd * (i_preservedProfit * pt));
             if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
             {

                 if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
                 {
                     Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
                 }
               
                     Comment ("Ордер успешно переведён в безубыток");
                     Print ("Ордер успешно переведён в безубыток");
             }
           }
    }
}

Na linha, vê-se claramente que se a parada calculada for igual àquela que já está lá, não haverá modificação! Certo? Então o cheque originalmente era? Mas o erro 1 estava constantemente aparecendo, até que eu tinha entrado em outra condição no início, antes da função de modificação:

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }
É por isso que.... é isso que estou tentando descobrir. Acho que descrevi tudo minuciosamente.
 
hoz:
Então você veio para o lugar errado se não entendeu. Estude o que você não entende, você vai perguntar. E se você não entende nada, você não precisa disso.


Se você não entende nada, não precisa dele. Bem, diga-me como editar o código para que ele não pareça invadido se você entender tudo. É minha primeira vez no fórum, e obtive uma resposta tão agradável.

"Gente genial tem uma resposta genial".

 
agat8430:


Bem, então me diga como editar o código que não se assemelharia a um hack se todos vocês entendessem. Vim para o ramo para iniciantes. Eu entrei no fórum pela primeira vez e obtive uma boa resposta.

"O povo genial tem uma resposta genial".

Para os recém-chegados primeiro:

Um navegador do fórum e respostas às perguntas mais freqüentes. Leitura altamente recomendada!( 1 2 3 4 5 6 ) 51 18.02.2011 FAQ

Razão: