Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 99
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
Dratuti. Como você faz um painel como este?
Dratuti. Como você faz um painel como este?
Dratuti. Como você faz um painel como este?
Vitaly Muzichenko,Artyom Trishkin agradece a você.
Continuando a escrever mais um porquinho no martingale, perdendo até mesmo no testador, caso contrário, como é suposto cultivarmos um alce.
No momento há um parâmetro desejado, que deve ser responsável pela possibilidade de abrir o próximo pedido após o(s) pedido(s) anterior(es) ser(em) fechado(s)
há 2 cenários
1) se o valor for verdadeiro
abrir um pedido
processo
fechar
e reabrir
2) se falso
Abra o pedido
Processo
Fechar
e depois fazer ExpertRemove
o problema é que estas duas condições são mutuamente exclusivas, mas têm de ser combinadas em 1 Expert Advisor, uma vez que
1) o valor é definido no início
2) o valor é estabelecido nas condições de entrada e processamento e aceito para processamento (se verdadeiro, aberto)
3) após o fechamento, definimos falso
Se alguém estiver interessado em tais coisas, eu ficaria feliz em ouvir minhas variantes.É simples:
Temos problemas com a lógica.
Tudo é simples:
Algo não parece certo, se for verdade - você deveria estar cortando couve, não nos arbustos)
Por favor, informe. O Expert Advisor não abre ordens no terminal. A compilação está em andamento, de acordo com os gráficos as ordens devem ser abertas. Mas não são. Estou anexando o código.
double Lots=NormalizeDouble((AccountFreeMargin()/100*Percent)/MarketInfo(Symbol(),MODE_MARGINREQUIRED),1);//determinar o número de lotes
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,0);//MACD parameters of the current bar
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,1);// os parâmetros MACD da barra anterior
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,2);// os parâmetros MACD da linha principal compensados por 2 barras
stopLoss duplo=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//Parâmetros de Parâmetros de Parâmetros de Parâmetros ParabolicSAR da barra atual
double Previous_StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//StopLoss parameters by ParabolicSAR parameters of the previous bar
duplo PSARCurrent=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//parameters ParabolicSAR da barra atual
duplo PSARPrevious=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//Parâmetros do PSARPrevious=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//ParabolicSAR parâmetros da barra anterior
//+------------------------------------------------------------------+
//| Função de carrapato de especialista|
//+------------------------------------------------------------------+
nulo OnTick()
{
data/hora estática New_Time=TimeCurrent();// Hora da barra atual
bool New_Bar=false; // Bandeira nova barra
int ticket,total,cnt;
//---------------------------------------------------------------------------
{
New_Bar=false; // Nenhuma barra nova
if(Time[0]==Novo_Tempo) // Comparar tempos
{
New_Bar=true; // New_Bar is caught
if(New_Bar==false) // Se uma barra não for nova
voltar; // ...depois sair
}
}
total=OrdensTotal();// Determinação do número de pedidos
if(total<1)
{
//... sem ordens em aberto
if((AccountFreeMargin()/100*Percent)<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT))
//Cheque a disponibilidade de fundos para abrir o lote mínimo
{
Imprimir("Não há fundos suficientes. Fundos livres = ",AccountFreeMargin()));
retornar;
}
//---condição para abertura de posição longa (BUY)
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)//check position opened
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("COMPRAR pedido aberto : ",OrderOpenPrice());
senão
Print("BUY order open error : ",GetLastError()));
retornar;
}
}
//... condição para abrir uma posição curta (SELL)
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_SELLL,Lots,Bid,3,StopLoss,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//check position opened
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("VENDER pedido aberto : ",OrderOpenPrice());
senão
Imprimir("Erro abrindo pedido de VENDA : ",GetLastError()));
retornar;
}
}
//--- sair do bloco "sem ordens abertas
}
//--- é importante entrar no mercado corretamente, mas é mais importante sair dele corretamente
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICNUMBER && // verifique o número mágico do pedido
OrderSymbol()==Symbol()) // verificar o símbolo do pedido
{
//--- posição longa aberta
if(OrderType()==OP_BUY)
{
//--- deve ser fechado?
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
//--- Encomende o fechamento e a saída
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Imprimir("OrderClose error ",GetLastError());
retornar;
}
//------------------Modificar a ordem por StopLoss
if(StopLoss>Previous_StopLoss &&StopLoss<iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Imprimir("Erro de modificação de pedido. Código de erro=",GetLastError()));
senão
Imprimir("Stop Loss price of the order has been modified successfully;)
retornar;
}
}
senão // ir abreviado
if(OrderType()==OP_SELL)
{
//--- deve ser fechado?
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
//--- Encomende o fechamento e a saída
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Imprimir("OrderClose error ",GetLastError());
retornar;
}
//-----------------Modificar a ordem por StopLoss
if(StopLoss<Previous_StopLoss &&StopLoss>iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Imprimir("Erro de modificação de pedido. Código de erro=",GetLastError()));
senão
Imprimir("Stop Loss price of the order has been modified successfully;)
retornar;
}
}
}
//-------------------------------------------------------------------------------------------------------
Sim, é mais simples do que isso.
mas e se mantivermos isso como um recuo e fizermos o seguinte
verificar a condição e...ou seja, como bloquear a entrada para operação posterior