Come codificare? - pagina 289

 

Ho bisogno di aiuto per finire questo EA

Sto cercando di codificare un EA (usando alcuni codici già fatti) che faccia quanto segue:

  • Apre due ordini pendenti, un sell stop e un buy stop, ad un orario specifico (in questo caso le 23:00), entrambi con uno SL e un TP.
  • Scade l'ordine pendente a una certa ora (per esempio alle 10:00) e non apre nessuna operazione venerdì alle 23:00.
  • Se vengono aperti due trade e uno raggiunge lo SL, l'altro ha il suo TP aumentato di una certa quantità (penso che un OrderModify risolverà qualcosa del genere).
  • I trade aperti si chiudono automaticamente entro le 23:00 del giorno successivo.
  • L'EA è quasi finito e alcuni problemi precedenti che ho avuto sono stati risolti e fa la maggior parte di quanto sopra, ma ho ancora i seguenti problemi e a questo punto non so come andare oltre, quindi se qualcuno può fornire il codice necessario sarebbe molto utile.

  • Quando due trade sono aperti e uno colpisce lo stoploss, ho bisogno che l'altro trade che è ancora aperto abbia il suo take profit aumentato di una certa quantità.
  • Le compravendite vengono ancora aperte il venerdì alle 23:00, cosa che non voglio.
  • Tutti i trade che sono ancora aperti alle 23:00 dovrebbero essere chiusi indipendentemente dal fatto che siano in perdita o in profitto.

Sono un noob con MQL e ho provato a cercare in giro le soluzioni ad alcuni dei problemi di cui sopra e sto avendo difficoltà a trovarle. Credo che i problemi possano essere risolti abbastanza facilmente con una codifica non così complicata. Se qualcuno potesse fornirmi una o più soluzioni ai problemi di cui sopra lo apprezzerei molto, ancora una volta.

Grazie,

madmax3

 

...

Provate qualcosa del genere:

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 sostituire stopLossToUse e takeLossToUse con i valori che si desidera che siano

kasio:
amici,

Sono un principiante della programmazione MQL4 e ho bisogno di aiuto per collegare un SL & TP ad un ORDERSEND con un broker ECN.

Inizialmente non riuscivo a capire perché gli SL e i TP facessero risultare il mio ordine in un errore, finché qualcuno non mi ha fatto notare che bisogna impostare il campo StopLoss e TakeProfit all'interno dell'ORDERSEND a "0", altrimenti un broker ECN/STP non eseguirà l'ordine.

Quindi, la mia domanda è: come posso eseguire un ordine a mercato e poi immediatamente (o entro uno o due secondi) allegare uno SL/TP a quel ticket?

Ecco un pezzo di codice pertinente alla mia domanda:

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

{

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

TakeAction=0;

}

Qualcuno può aiutarmi a inserire del codice subito dopo il comando OrderSend in modo che io possa attaccare un TP/SL di diciamo arbitrariamente 25pips a quello specifico ticket?

Qualsiasi aiuto sarebbe molto apprezzato. Grazie in anticipo.

Cordiali saluti,

Kasio
 

aiuto!

qualcuno può aiutarmi a fare in modo che questo indicatore non si ridipinga, per favore?

File:
pi_bg_v2.mq4  3 kb
 

...

È un codice decompilato, ma comunque guarda questo thread: https: //www.mql5.com/en/forum/179650

È un altro rinominato vento solare, quindi ...

phoenix:
qualcuno può aiutarmi a fare questo indicatore per non ridipingere per favore?
 

Qualche idea su come codificare quello che ho postato? Le mie scuse se sono impaziente o qualcosa del genere, voglio solo sapere se è stato letto.

Grazie,

madmax3

 

...

Aggiungi qualcosa come questo nel tuo EA all'inizio della procedura start() :
if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); } [/PHP]

Aggiungete questo nel codice:

[PHP]void CloseAll()

{

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderMagicNumber()!=MagicNumber) continua;

//

//

//

//

//

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

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;

}

}

}

}

Questo risolverà i tuoi punti 2 e 3 (ordini aperti al venerdì)

Il primo punto è piuttosto complicato da codificare - probabilmente dovrai ridefinire quella regola

madmax3:
Qualche idea su come codificare quello che ho postato? Le mie scuse se sono impaziente o qualcosa del genere, voglio solo sapere se è stato letto.

Grazie,

madmax3
 

Per favore aiutatemi! Numero di errore = 4103. pos = 10. Impossibile aprire il file

Salve,

Sono nuovo qui e sono nuovo anche nella programmazione MT. Qualcuno può aiutarmi su questo?

Ho ricevuto "Si è verificato un errore. Numero di errore = 4103. pos = 10 (impossibile aprire il file)".

Il file è salvato correttamente come gif ma sto ricevendo il messaggio di cui sopra. Dov'è il problema?

Il codice:

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates();

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

if (cmd==OP_SELL) Comment (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);

se(handle<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(filename,900,600)) Print("Errore di WindowScreenShot: "+GetLastError());

}

}

else FileClose(handle);

}

Qualsiasi aiuto è apprezzato. Grazie.

 

...

Funziona bene

Il file deve essere nella sottocartella experts\files e ho usato come esempio il ticket numero 0, quindi il nome completo del file era nel mio esempio "EURUSD_Demo_0_Open.gif" e lo ha aperto senza problemi (lo fa bene sia se usi FILE_CSV che con FILE_BIN). Quindi, se è salvato nella cartella corretta e con il nome corretto, il tuo codice funziona bene

Akkinmore:
Ciao,

Sono nuovo qui e sono nuovo anche nella programmazione MT. Qualcuno può aiutarmi su questo?

Ho ottenuto "Si è verificato un errore. Numero di errore = 4103. pos = 10 (impossibile aprire il file)".

Il file è salvato correttamente come gif ma sto ricevendo il messaggio di cui sopra. Dov'è il problema?

Il codice:

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates();

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

if (cmd==OP_SELL) Comment (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);

se(handle<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(filename,900,600)) Print("Errore di WindowScreenShot: "+GetLastError());

}

}

else FileClose(handle);

}

Qualsiasi aiuto è apprezzato. Grazie.
 
mladen:
Funziona bene Il file deve essere nella sottocartella experts\files e ho usato come esempio il ticket numero 0, quindi il nome completo del file era nel mio esempio "EURUSD_Demo_0_Open.gif" e lo ha aperto senza problemi (lo fa bene sia se usi FILE_CSV che con FILE_BIN). Quindi, se è salvato nella cartella corretta e con il nome corretto, il tuo codice funziona bene

Grazie. Sì, il file è salvato nella cartella corretta e con il nome corretto. Potrei provare a usare FILE_BIN invece di FILE_CSV per verificare se il messaggio di errore appare di nuovo.

 

...

Come fare in modo che il mio computer mostri correttamente le parole in russo negli indicatori?...Grazie...