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
Obrigado por sua ajuda, Mladen. Eu mexi um pouco no código até conseguir compilá-lo sem erros, mas a EA ainda pára e reverte depois de uma perda. Este é o código exato que estou usando agora: duplo GetLastPL() me dá o seguinte erro: '(' - definição da função inesperada.
BlackCoq
Você deve fazer todas as comparações lógicas dentro do loop porque funções como OrderProfit() estão retornando o lucro da ordem atualmente selecionada a partir de uma lista de ordens fechadas. Se não estiver dentro do laço principal (for(int i=OrdersHistoryTotal()-1;i>=0;i--)) então somente a última ordem selecionada será testada e isso não significa que seja a última ordem (as metaquotas indicam explicitamente em sua documentação que as ordens na lista de ordens fechadas (ou ainda abertas) não precisam estar em nenhuma ordem em particular - é responsabilidade dos codificadores verificar a ordem)
BlackCoq Você deve fazer todas as comparações lógicas dentro do loop porque funções como OrderProfit() estão retornando o lucro da ordem atualmente selecionada a partir de uma lista de ordens fechadas. Se não estiver dentro do laço principal (for(int i=OrdersHistoryTotal()-1;i>=0;i--)) então somente a última ordem selecionada será testada e isso não significa que seja a última ordem (as metaquotas indicam explicitamente em sua documentação que as ordens na lista de ordens fechadas (ou ainda abertas) não precisam estar em nenhuma ordem em particular - é responsabilidade dos codificadores verificar a ordem)
Após muitas horas falhando com esta tarefa aparentemente fácil, decidi estudar muito mais programação antes de continuar. Obrigado por sua ajuda de qualquer forma!
Quando tentei isso, a EA não abriu nenhuma posição:
{ double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); } } { if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]
And with this, it would "stop and reverse" even if last trade was a loss:
[PHP] { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }Mais uma vez, obrigado.
Após muitas horas falhando com esta tarefa aparentemente fácil, decidi estudar muito mais programação antes de continuar. Obrigado por sua ajuda de qualquer forma!
Quando eu tentei isso, a EA não abriu nenhuma posição:
{ double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); } } { if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]
And with this, it would "stop and reverse" even if last trade was a loss:
[PHP] { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }BlackCoq
Se você usar a função que afixei como está, ele lhe devolverá o lucro exato da última ordem fechada (não há necessidade de alterar nada nela)
BlackCoqSe você usar a função que coloquei como está, ele lhe devolverá o lucro exato do último pedido fechado (não há necessidade de alterar nada nele)
Quando tento copiar a função, recebo inúmeros erros, não importa como eu tente ajustá-la.
Este código:
{
duplo GetLastPL()
{
duplo TempLastOrderProfit = 0;
data/hora FecharTempo = 0;
for(int i=OrdensHistóriaTotal()-1;i>=0;i--)
{
se (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
{
CloseTime = OrderCloseTime();
TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderComission();
}
}
return(TempLastOrderProfit);
{
if(StopAndReverse===true && subTotalTrade()>0 && TempLastOrderProfit>0)
{
if((LastTrade==="BUY" && SellCondition===verdadeiro) ||| (LastTrade==="SELL" && BuyCondition===verdadeiro))
{
subCloseOrder();
if(subTotalTrade()>0) subCloseOrder();
if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl===verdadeiro) Print("STOP AND REVERSE !");
}
}
}
}Dá-me os erros:
Compilando 'universalMAcrossECNmartingaleSAR.mq4'...
(' - definição da função inesperada (538, 20)
'TempLastOrderProfit' - variável não definida (548, 15)
'TempLastOrderProfit' - variável não definida (551, 15)
TempLastOrderProfit' - variável não definida (553, 52)
Quando tento copiar a função, recebo inúmeros erros, não importa como eu tente ajustá-la.
Este código:
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]
Gives me the errors:
[PHP]
Compiling 'universalMAcrossECNmartingaleSAR.mq4'... '(' - function definition unexpected (538, 20)'TempLastOrderProfit' - variable not defined (548, 15)'TempLastOrderProfit' - variable not defined (551, 15)'TempLastOrderProfit' - variable not defined (553, 52)
BlackCoq
Essa função deve ser colada fora de qualquer outra função. Aqui está uma e muito simples que mostra como ela funciona e como deve ser usada
BlackCoq Essa função deve ser colada fora de qualquer outra função. Aqui está uma e muito simples que mostra como ela funciona e como deve ser usada
Tenho certeza de que estou perdendo algo aqui, mas mesmo que eu tente copiar a função fora de qualquer outra função na EA, ainda recebo os seguintes erros:
"(' - definição da função inesperada(depois da dupla GetLastPL())
'TempLastOrderProfit' - variável não definida (554, 15)
'TempLastOrderProfit' - variável não definida (557, 15)
Tenho certeza de que estou perdendo algo aqui, mas mesmo que eu tente copiar a função fora de qualquer outra função na EA, ainda recebo os seguintes erros:
(' - definição da função inesperada (após a dupla GetLastPL())
'TempLastOrderProfit' - variável não definida (554, 15)
'TempLastOrderProfit' - variável não definida (557, 15)Desculpe, mas sem seu código eu não tenho idéia do que você está fazendo
Como você pode ver pelo teste EA ele funciona sem nenhum problema
Desculpe, mas sem seu código eu não tenho idéia do que você está fazendoComo você pode ver a partir desse teste EA ele funciona sem nenhum problema
Eu recebo vários erros quando tento compilar a EA que você anexou também. Estamos usando diferentes versões do MT4?
Estou anexando o EA ao qual estou tentando adicionar a função antes de "parar e reverter".
Eu recebo vários erros quando tento compilar a EA que você anexou também. Estamos usando diferentes versões do MT4? Estou anexando o EA ao qual estou tentando adicionar a função antes de "parar e reverter".
Se você estiver usando build 509 então substitua "void start(void)" por "void start()" e você não receberá nenhum erro de compilação. Veja os exemplos para ambos builds build 509 e build 610 (a versão do metaeditor para build 610 é 887)
Também anexando a EA com a função GetLastPL() já anexada a ela. Tudo que você precisa fazer é fazer uma chamada para GetLastPL() em um local no código onde você deseja que ela verifique se o lucro do último pedido foi positivo ou negativo.
_________________________
PS: compilará em build 509 assim como em build 610. Em 610 você receberá 3 avisos, mas estes são irrelevantes para a operação da EA
Se você estiver usando o build 509 então substitua "void start(void)" por "void start()" e você não receberá nenhum erro de compilação. Veja os exemplos para ambos os builds build 509 e build 610 (a versão do metaeditor para build 610 é 887)
Também anexando a EA com a função GetLastPL() já anexada a ela. Tudo que você precisa fazer é fazer uma chamada para GetLastPL() em um local no código onde você deseja que ela verifique se o lucro do último pedido foi positivo ou negativo.
_________________________
PS: compilará em build 509 assim como em build 610. Em 610 você receberá 3 avisos, mas estes são irrelevantes para a operação da EATrabalhando perfeitamente agora. Muito obrigado por sua ajuda e paciência!