Como codificar? - página 289

 

Precisa de ajuda para terminar esta EA

Estou tentando codificar um EA (usando alguns códigos já feitos) que faz o seguinte:

  • Abre duas ordens pendentes, uma parada de venda e uma parada de compra, em um horário específico (neste caso 23:00), ambas com um SL e um TP.
  • Expira a ordem pendente em uma determinada hora (por exemplo às 10:00) e não abre nenhuma negociação na sexta-feira 23:00.
  • Se duas negociações são abertas e uma chega ao SL, a outra tem seu TP aumentado para um certo valor (acho que uma OrderModify resolverá algo como isto).
  • As negociações que são abertas fecham automaticamente até as 23h00 do dia seguinte.
  • O EA está quase pronto e algumas questões anteriores que eu tinha foram resolvidas e faz a maioria das acima, mas ainda tenho as seguintes questões e neste ponto não sei como ir mais longe, portanto, se alguém pudesse fornecer o código necessário, isso seria muito útil.

  • Quando dois negócios estão abertos e um atinge o prejuízo, eu preciso do outro negócio que ainda está aberto para ter seu lucro aumentado em um certo valor.
  • Os negócios ainda estão sendo abertos na sexta-feira às 23h00, o que eu não quero.
  • Qualquer negociação que ainda esteja aberta até as 23h00 deverá ser fechada, independentemente de estar com prejuízo ou lucro.

Sou um noob na MQL e tenho tentado procurar as soluções para algumas das questões acima e estou tendo problemas para encontrá-las. Acredito que as questões podem ser resolvidas com bastante facilidade com uma codificação não tão complicada. Se alguém pudesse me fornecer uma solução ou soluções para qualquer uma das questões acima, eu, mais uma vez, apreciaria muito.

Muito obrigado,

madmax3

Arquivos anexados:
 

...

... Tente algo assim :

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

int ticketBuy = OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Co mm,0,0,CLR_NONE);

if (ticketBuy>-1)

OrderModify(ticketBuy,OrderOpenPrice(),stopLossToUse,takeProfitToUse,0,CLR_NONE);

}

Basta substituir stopLossToUse e takeLossToUse pelos valores que você deseja que sejam

kasio:
Amigos,

Sou um novato na programação da MQL4 e preciso de ajuda para anexar um SL & TP a um ORDERSEND com um corretor ECN.

Inicialmente, eu não conseguia entender porque os SL & TPs estavam fazendo meu pedido resultar em um erro até que alguém apontou que alguém tem que definir o campo StopLoss & TakeProfit dentro do ORDERSEND para "0" ou então um corretor ECN/STP não executará o pedido.

Portanto, minha pergunta é: Como posso executar uma ordem no Mercado e depois imediatamente (ou dentro de um ou dois segundos) anexar um SL/TP a esse bilhete?

Aqui está uma parte do código pertinente ao meu questino:

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction===1)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,0,Comm,0,0,CLR_NONE);

TakeAction=0;

}

Qualquer pessoa pode me ajudar a inserir o código logo após o comando OrderSend para que eu possa anexar um TP/SL de 25pips, digamos arbitrariamente, a esse ticket específico?

Qualquer ajuda seria muito apreciada. Agradecemos antecipadamente.

Saudações,

Kasio
 

ajuda!

alguém pode me ajudar a fazer este indicador para não repintar por favor?

Arquivos anexados:
pi_bg_v2.mq4  3 kb
 

...

É um código descompilado, mas de qualquer forma olhe para esta linha : https://www.mql5.com/en/forum/179650

É mais um vento solar rebaptizado, portanto ...

phoenix:
alguém pode me ajudar a fazer este indicador para não repintar, por favor?
 

Alguma idéia sobre como codificar o que eu postei? Minhas desculpas se estou sendo impaciente ou algo assim, só quero saber se foi lido.

Obrigado,

madmax3

 

...

Adicione algo como isto em sua EA no início do procedimento de início() :
if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); } [/PHP]

Acrescentar isto ao código :

[PHP]void CloseAll(){for

(int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{OrderSelect

(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderMagicNumber()!=MagicNumber) continue

;//////////if

(OrderType()==OP_BUY || OrderType()==OP_SELLL)

{for

(int c=0; c<3; c++)

{RefreshRates

();

if (OrderType()==OP_BUY)

{

double cp = Bid;}else

{ cp = Ask;}OrderClose

(OrderTicket(),OrderLots(),cp,0,Yellow);

int err=GetLastError();

if(err===4 || err==136 || err==137 ||| err==138 || err==146)

{Sleep

(5000); continue;

}break

;

}break

;

}}}}}

Isso resolverá seus pontos 2 e 3 (ordens abertas na sexta-feira)

O primeiro ponto é bastante complicado de codificar - você provavelmente precisará redefinir essa regra

madmax3:
Alguma idéia sobre como codificar o que eu postei? Minhas desculpas se estou sendo impaciente ou algo assim, só quero saber se foi lido.

Obrigado,

madmax3
 

Por favor, ajude! Número do erro = 4103. pos = 10. Não é possível abrir a FIle

Hi,

Sou novo aqui e também novo na programação de MT. Alguém pode me ajudar nisto?

Eu recebi "Um erro tinha ocorrido. Número do erro = 4103. pos = 10 (não é possível abrir arquivo) mensagem".

O arquivo é salvo corretamente como gif, mas estou recebendo a mensagem acima. Onde está o problema?

O código:

Tela nula(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates();

if (cmd===OP_BUY) Comentário (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Buy: "DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELLL) Comentário (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell: ",DoubleToStr(orderOpenPrice,Digits)) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif";

int handle = FileOpen(filename,FILE_CSV|FILE_READ);

if(handle<1)

{

se (GlobalVariableGet("_MonitorScreenScreenShot") != 0 )

{

if(!WindowScreenShot(filename,900,600)) Imprimir("WindowScreenShot error: "+GetLastError());

}

}

outro FileClose(handle);

}

Qualquer ajuda é apreciada. Obrigado.

 

...

Funciona bem

O arquivo deve estar na subpasta experts\files e eu usei como exemplo o ticket número 0, então o nome completo do arquivo estava em meu exemplo "EURUSD_Demo_0_Open.gif" e ele o abriu sem problemas (faz bem se você usar FILE_CSV assim como com FILE_BIN). Portanto, se for salvo na pasta e no nome corretos, seu código funciona OK.

Akkinmore:
Hi,

Sou novo aqui e também novo na programação de MT. Alguém pode me ajudar nisto?

Eu recebi "Um erro tinha ocorrido. Número do erro = 4103. pos = 10 (não é possível abrir arquivo) mensagem".

O arquivo é salvo corretamente como gif, mas estou recebendo a mensagem acima. Onde está o problema?

O código:

Tela nula(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates();

if (cmd===OP_BUY) Comentário (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Buy: "DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELLL) Comentário (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell: ",DoubleToStr(orderOpenPrice,Digits)) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif";

int handle = FileOpen(filename,FILE_CSV|FILE_READ);

if(handle<1)

{

se (GlobalVariableGet("_MonitorScreenScreenShot") != 0 )

{

if(!WindowScreenShot(filename,900,600)) Imprimir("WindowScreenShot error: "+GetLastError());

}

}

outro FileClose(handle);

}

Qualquer ajuda é apreciada. Obrigado.
 
mladen:
Funciona OK O arquivo deve estar na subpasta experts\files e eu usei como exemplo o ticket número 0, então o nome completo do arquivo estava em meu exemplo "EURUSD_Demo_0_Open.gif" e ele o abriu sem problemas (ele funciona bem se você usar FILE_CSV assim como com FILE_BIN). Portanto, se for salvo na pasta e no nome corretos, seu código funciona OK.

Obrigado. Sim, o arquivo é salvo na pasta e no nome corretos. Posso tentar usar o FILE_BIN em vez do FILE_CSV para verificar se a mensagem de erro aparece novamente.

 

...

Como fazer meu computador mostrar as palavras em russo em indicadores corretamente?....Obrigado...