Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
..........
ticket=OrderSend(.....);//приказ и запоминаем тикет ордера
if(ticket>0)//открылась
{
//действия с тикетом
}
Mais preciso seria:
{
//действия с тикетом
}
OrderSend - "Devolve o número do ticket atribuído ao pedido pelo servidor comercial ou -1 em caso de falha ."
Embora mesmo no testador o primeiro número de bilhete seja 1 e não 0.
Mais precisamente, será:
{
//действия с тикетом
}
OrderSend - "Devolve o número do ticket atribuído ao pedido pelo servidor comercial ou -1 em caso de falha ."
Embora mesmo no testador o primeiro número de bilhete seja 1 e não 0.
Tão contente de ver a Oksana desaparecida ))
Sim, os bilhetes começam com 1 no testador e no servidor DC, mas você nunca pegará 1 no DC. Sua versão não está funcionando bem, não é correto comparar a desigualdade com -1. E se a conta real retornar 1234567?
{
//действия с тикетом
}
// так верно
Assim, no testador um bilhete não pode ser menos que um, ainda mais no mundo real
zero é inferior a um, ambas as condições são corretas, apenas uma para comparação, a outra para exclusão.
Embora eu tenha me acostumado a fazer isso:
int ticketbuy = OrderSend(sy,OP_BUY,ll,MarketInfo(sy,MODE_ASK),Slippage,0,0,Comments,mn,0,BuyColor);
if(ticketbuy<0)
Print(sy," OpenPosition. OrderSend Buy fail #",GetLastError());
else
Print(sy," OpenPosition. OrderSend Buy successfully");
Mas considerando as minhas, as condições são todas corretas, apenas a lógica é diferente)
{
bool ret;
int error=0;
double price=0.0;
int total=OrdersTotal();
if(!disabled(_Symbol))
{
Print(rezult);
return;
}
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderType()>1)continue;
if(OrderType()!=type)continue;
int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
if(OrderType()==OP_BUY)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_BID),digits);
if(OrderType()==OP_SELL)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK),digits);
if(NormalizeDouble(NormalizePrice(OrderSymbol(),price),digits)!=price)continue;
ret=OrderClose(OrderTicket(),OrderLots(),price,Slippage,clrLawnGreen);
if(!ret)
{
error=GetLastError();
rezult=StringConcatenate(OrderSymbol(),": error close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())," №- ",error," ",ErrorDescription(error));
Print(rezult);
}
else
{
rezult=StringConcatenate(OrderSymbol(),": close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType()));
Print(rezult);
}
}
}
Desejo-lhe um Feliz Ano Novo! Você poderia me dizer o que está errado com este código?
Aconselho a mudar a lógica na raiz
Em outras palavras, preciso acompanhar os pedidos abertos - quantas vendas e quantos depósitos estão abertos.
E, com base nestas considerações, devemos gerenciar as ordens - abri-las e fechá-las
Não sei por que a EA abre muitas ordens se a condição não deveria ser para abrir uma posição, mas após abri-la abre novamente.
não consigo entender porque minha EA abre muitos pedidos se eu não quero que ela abra uma posição mas ela abre novamente depois que eu a abro, suspeito que tenho algo errado com o loop, eu não entendo realmente os loops
for(int i=OrdensTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // if our Magic
{
if(OrderType()==OP_BUY) sdel_b++; // contar bai
if(OrderType()==OP_SELL) sdel_s+++; // Contar sels
if(OrderType()==OP_BUYSTOP) otl_b++; // Contagem de bystops pendentes
if(OrderType()==OP_SELLSTOP) otl_s++; // Contagem de saldos pendentes
}
// agora ordens abertas
if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // Se for a hora e não houver ordens pendentes
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // tomar uma posição
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
Não sei por que a EA abre muitas ordens se a condição não deveria ser para abrir uma posição, mas após abri-la abre novamente.
Não entendo porque minha EA abre muitos pedidos, se não quero que ela abra uma posição, mas ela abre novamente após a abertura. Acho que posso estar errado com o loop, não entendo realmente os loops
for(int i=OrdensTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // if our Magic
{
if(OrderType()==OP_BUY) sdel_b++; // contar bai
if(OrderType()==OP_SELL) sdel_s+++; // Contar sels
if(OrderType()==OP_BUYSTOP) otl_b++; // Contagem de bystops pendentes
if(OrderType()==OP_SELLSTOP) otl_s++; // Contagem de saldos pendentes
}
// agora ordens abertas
if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // Se for a hora e não houver ordens pendentes
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // tomar uma posição
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
Tente isto
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
Tente isto
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
Ainda abre um monte de pedidos
Saudações. Feliz Ano Novo para todos!
Quando tento otimizar uma EA depois de executada, os resultados e o gráfico de otimização estão em branco e o log é escrito no log:
Foramfeitos 2passesdurante a otimização, 2 resultados foram descartados como insignificantes
desmarcar"algoritmo genético" não ajuda. Entendo que os resultados parecem insignificantes para o testador, mas como podemos ver o que existe? E isto apesar do fato de que o Consultor Especialista não perde dinheiro durante o mesmo período (um ano) durante os testes, mas é +/- 20%.