[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 636

 

Boas pessoas, ajuda, não consigo entender, TrailingStop não está funcionando como deveria, se o negócio for aberto na loja de venda funciona bem, mas se você abrir a BUY, então por alguma razão imediatamente modificou a rolha. Onde está o erro que eu não consigo entender.... AQUI ESTÁ O CÓDIGO:

externo int TP = 50;
externo int SL = 50;
Trailing int exterior = 15;

int init()
{retorno(0);}
int deinit()
{retorno(0);}

int start()
{
//========= Calculate Breakeven level ======
int i;
lotes duplosBUY=0;
lotes duplosSEL=0;
soma duplaBUY=0;
soma duplaSEL=0;

para (i=0; i<OrdensTotal(); i+++)
{
se (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continuar;
se (OrderSymbol()!=Symbol()) continuar;
se (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

se (OrderType()==OP_SELL)
{
lotsSEL=slotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
preço duploBUY=0;
se (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
preço duploSEL=0;
se (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;

//======== Posição aberta =====


duplo MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

se (OrdensTotal() < 1 && Oferta>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,0,Green);
se (OrderTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,0,Vermelho);


//======= Trailing Stop =======

for(i = 0; i <= OrderTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

se (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingPoint*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
se (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE)
}
}
}
retorno(0);

}

Há um momento, se eu mudar o preçoBUY para OrderOpenPrice() no bloco TrailingStop, ele funciona, mas eu preciso rastrear do nível de equilíbrio, não do preço de abertura..... Na SELL funciona, mas na compra por alguma razão não.... Eu não entendo onde está o erro.....SOS!!!!!!!!

 
Roman.:


Isto não é um erro - é uma mensagem de que o saldo mínimo foi alcançado - ou seja, a conta é drenada - a execução é encerrada e uma nova é iniciada com outro conjunto de parâmetros de entrada - veja as caixas de seleção e defina os valores limite na guia Otimizar Testador:

Obrigado!
 

Boa tarde!!! Minha EA está retraindo os pedidos com este lugar.

 if(Summaprofita()>=Profit_v_balans )
        {
         for(int i=OrdersTotal()-1;i>=0;i--)
           {
              bool error=true;
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            
            if( magic==OrderMagicNumber( ) && OrderSymbol()==Symbol())
              {
              
                 OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE); error=false;
                           Sleep(1000);
             OrderDelete(OrderTicket());error=false;
         } } }
        

Minha EA já esteve indo bem antes, pelo menos até que eu tive 2-5 pedidos. Agora temos tantas encomendas quantas quisermos - 20, 50 de cada lado. Em resumo, não limpa. Bem, duas ou três ou quatro vezes, e depois de repente não!

Eu me pergunto como ficará no testador - em geral, ele remove várias encomendas perto do preço, mas não todas! Que tipo de desvios podemos prever, inventar, fantasiar, que certamente fecharia?

Realmente, estava tudo bem antes. Costumava fechar, não era? O que mais é necessário? ?????

 

Boas pessoas, ajuda, não consigo entender, TrailingStop não está funcionando como deveria, se o negócio for aberto na loja de venda funciona bem, mas se você abrir a BUY, então por alguma razão imediatamente modificou a rolha. Onde está o erro que eu não consigo entender.... AQUI ESTÁ O CÓDIGO:

extern int TP = 100;
extern int SL = 100;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Расчёт уровня безубытка ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

if (OrderType()==OP_SELL)
{
lotsSEL=lotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;



//======== Открытие позиции =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
return(0);
}

Há um tempo, se eu mudar o preçoBUY para OrderOpenPrice() no bloco TrailingStop, tudo funciona, mas eu preciso de uma parada de retaguarda a partir do nível de equilíbrio, não a partir do preço de abertura..... Na SELL funciona, mas na compra por alguma razão não.... Eu não entendo onde está o erro.....SOS!!!!!!!!
 
MIR-ASOV:

Boas pessoas, ajuda, não consigo entender, TrailingStop não está funcionando como deveria, se o negócio for aberto na loja de venda funciona bem, mas se você abrir a BUY, então por alguma razão imediatamente modificou a rolha. Onde está o erro que eu não consigo entender.... AQUI ESTÁ O CÓDIGO:

Há um tempo, se eu mudar o preçoBUY para OrderOpenPrice() no bloco TrailingStop, tudo funciona, mas eu preciso de uma parada de retaguarda a partir do nível de equilíbrio, não a partir do preço de abertura..... Na SELL funciona, mas na compra por alguma razão não.... Eu não entendo onde está o erro.....SOS!!!!!!!!

Tente produzir com Print() o valor do PriceBUY antes da modificação para ver se ele atende às expectativas...
 
Tente produzir com Print() o valor do PriceBUY antes da modificação para ver se ele atende às expectativas...
Sim, eu verifiquei, corresponde total e completamente...... Essencialmente o nível de equilíbrio para COMPRA é igual ao preço de abertura do pedido, mas por alguma razão não funciona, eu coloco OrderOpenPrice() tudo funciona, eu coloco priceBUY, no......
 
Muito provavelmente você tem zero na variávelpriceBUY no momento da abertura, portanto Bid-priceBUY(0)==Bid, e portanto
 
Dimka-novitsek:

Boa tarde!!! Minha EA está retraindo os pedidos com este lugar.

Minha EA parece ter estado bem antes, pelo menos até que eu tive 2-5 pedidos. Mas agora tenho tantas encomendas quantas eu quiser - 20, 50 de cada lado. Em resumo, não limpa. Bem, duas ou três ou quatro vezes, e depois de repente não!

Eu me pergunto como ficará no testador - ele remove vários pedidos perto do preço, mas não todos eles! Que tipo de desvios podemos inventar, fantasia, para que possamos fechá-los sem falhas?

Realmente, tudo estava bem antes? Costumava fechar, não era? O que mais ele precisa?????

Bem, isso não vai funcionar.

  OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);

Enquanto o pedido não é fechado, seu OrderClosePrice é igual a 0, e neste lugar você deve substituir o preço real pelo qual você está fechando o pedido, ou seja, Pergunte em caso de pedido de VENDA e Licite para COMPRAR.

 
alsu:

Bem, não funciona assim.

Até que o pedido seja fechado, seu OrderClosePrice é igual a 0, e neste lugar você tem que colocar o preço real ao qual você está fechando o pedido, ou seja, Pergunte em caso de pedido de VENDA e Licite para COMPRAR.


Não,OrderClosePrice() para um pedido que não está fechado não é igual a zero - cheque.OrderCloseTime() - sim
 
Obrigado!!! Vou tentar, consegui.
Razão: