Risposta

Condividiamo qui le funzioni MQL4 personalizzate di SQ!

10 risposte

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visita il profilo

8 anni fa #114883

Ciao a tutti i colleghi utenti di SQ,

poiché pochi di noi provengono dalla programmazione MQL4, abbiamo le nostre idee su come migliorare le funzionalità MQL4 di SQ originali,

allora..., volevo condividere alcuni dei miei "add-on" che ho implementato nei file MQL4 originali di SQ....

Inoltre, vorrei che tutti coloro che hanno modificato in qualche modo i file MQL4 di SQ condividessero le loro modifiche qui con tutti 🙂

 

inizierò condividendo alcuni dei miei... buon divertimento!

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

¢ BACKTEST MOLTO PIÙ VELOCE QUANDO SI USA MT4 (SENZA MODALITÀ VISIVA):

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Aprite il file "Main.tpl" e inserite la seguente riga di codice da qualche parte sotto "int start() {" e sopra "drawStats();":

if(IsTesting()&&IsVisualMode()==false){ObjectsDeleteAll();} /Cancella tutti gli oggetti per velocizzare il backtesting di MT4...

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

LIMITATORE DI DIFFUSIONE:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Cercate "MaxSlippage = 3;" all'interno del file "PrintParameters.inc", quindi sotto questa riga inserite la seguente riga di codice:

extern double MaxSpread = 1,5; // << Inserite qui il vostro spread massimo in PIP

Cercate "void openPosition" all'interno del file "MT4Functions.inc", quindi sotto "if(sqIsTradeAllowed() == 1) {" inserite il seguente codice:

         stringa OrderTypeString;
         se(orderType==OP_BUY) OrderTypeString="#BUY";
         if(orderType==OP_SELL) OrderTypeString="#SELL";
         se(orderType==OP_BUYLIMIT) OrderTypeString="#BUY_LIMIT";
         if(orderType==OP_SELLLIMIT) OrderTypeString="#SELL_LIMIT";
         if(orderType==OP_BUYSTOP) OrderTypeString="#BUY_STOP";
         if(orderType==OP_SELLSTOP) OrderTypeString="#SELL_STOP";
         //
         int orderStartPointInTime = GetTickCount();
         if(orderType==OP_BUY||orderType==OP_SELL){if(DoubleToStr((Ask - Bid)*gPointPow, 1)>DoubleToStr(MaxSpread, 1)){Log("#ERROR!: Lo spread dell'ordine ("+OrderTypeString+") era troppo alto, - (Spread attuale: ("+DoubleToStr((Ask - Bid)*gPointPow, 1)+")>("+DoubleToStr(MaxSpread, 1)+" Massimo), Ritardato.");Sleep(500);return(0);}}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

¢ Determinare se l'ordine è stato chiuso da Stoploss/Takeprofit LOG NOTIFIER:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Aprite il file "Main.tpl" e inserite la seguente riga di codice da qualche parte sotto "int start() {" e sopra "drawStats();":

Order_Closure_OfSLTP_Notifier();

Aprite il file "CustomCodeMT4,mq4" e inserite il seguente codice da qualche parte sotto il resto del codice esistente..:

void Order_Closure_OfSLTP_Notifier()
{
   for(int i=OrdersHistoryTotal()-1;i>=0;i--){
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true&&OrderSymbol()==Symbol()){
   se(OrdineNumeroMagico()==NumeroMagico){
   if(TimeCurrent()-OrderCloseTime()==0) //<=OrderTakeProfit()){Log("#Order: ("+OrderTypeString+" [Ticket: "+OrderTicket()+"]) è stato chiuso da TP.");}
            if(OrderType()==OP_BUY&&OrderClosePrice()<=OrderStopLoss()){Log("#Order: ("+OrderTypeString+" [Ticket: "+OrderTicket()+"]) è stato chiuso da SL.");}
            //
            if(OrderType()==OP_SELL&&OrderClosePrice()=OrderStopLoss()){Log("#Order: ("+OrderTypeString+" [Ticket: "+OrderTicket()+"]) è stato chiuso da SL.");}
         //
      //________________________________________________________
   }}}}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visita il profilo

8 anni fa #135833

Per favore, se qualcuno ha ottenuto un BreakEven & TrailingStop da TICKS, per favore condividetelo..,

Grazie...

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visita il profilo

8 anni fa #135874

Per favore, se qualcuno ha ottenuto un BreakEven & TrailingStop da TICKS, per favore condividetelo..,

Grazie...

Qualcuno?

0

stearno

Cliente, bbp_partecipante, comunità, 379 risposte.

Visita il profilo

8 anni fa #135903

Karish,

Mi dispiace per una domanda così semplice. Dove si trova il "Main.tpl"?  

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Visita il profilo

8 anni fa #135904

Karish,

Mi dispiace per una domanda così semplice. Dove si trova il "Main.tpl"?  

Tutti i file si trovano nella cartella "SQ\code",

il file "Main.tpl" che si trova nella cartella "SQ\code\Mql_MT4".

 

C'è anche un Main.tpl all'interno della cartella "SQ\code\Mql_MT4_BarOpen", ma io non uso la funzione "BarOpen"..., solo quella basata sui Tick, per cui mi riferisco alla cartella "SQ\code\Mql_MT4".

0

stearno

Cliente, bbp_partecipante, comunità, 379 risposte.

Visita il profilo

8 anni fa #135905

Grazie!

0

scagnozzi

Cliente, bbp_partecipante, comunità, sq-ultimate, 487 risposte.

Visita il profilo

7 anni fa #141012

qualcuno ha apportato modifiche al codice MQL4 di SQ per superare il processo di convalida su MQL Market? Sono bloccato da questo problema https://www.mql5.com/en/articles/2555#invalid_lot

Volete diventare un algotrader redditizio? Abbiamo iniziato a utilizzare il software StrateQuant all'inizio del 2014. Ora abbiamo un grande know-how per la costruzione di EA per ogni possibile tipo di mercato. Condividiamo questo know-how, le applicazioni, gli strumenti e anche tutte le strategie finali con i trader reali. Se volete unirvi a noi, compilate il seguente modulo MODULO.

0

daveng

Customer, bbp_participant, community, 93 replies.

Visita il profilo

7 anni fa #141066

Sì, fa parte dei requisiti di MQL controllare la dimensione del lotto per assicurarsi che rimanga all'interno della gamma di lotti minima e massima del broker. Anche il passo del lotto deve essere controllato.

È possibile utilizzare il seguente codice (per MT4) che ho modificato dal codice originale di MQL:

============================================================================

bool CheckLotSizeValue(double volume)
{
//- volume minimo consentito per le operazioni commerciali
   if(volume<min_volume)
   {
      Print("Il volume del lotto è inferiore al minimo consentito. La dimensione minima consentita del lotto è ",min_volume);
      return(false);
   }

//- volume massimo consentito di operazioni commerciali
   se(volume>volume_max)
   {
      Print("Il volume del lotto è superiore al massimo consentito. La dimensione massima consentita del lotto è ",max_volume);
      return(false);
   }

//- ottenere il passo minimo di variazione del volume
   int ratio=(int)MathRound(volume/volume_step);
   se(MathAbs(rapporto*volume_passo-volume)>0,0000001)
   {
      PrintFormat("Il volume di dimensione del lotto non è un multiplo del passo minimo SYMBOL_VOLUME_STEP=%.2f, il volume corretto più vicino è %.2f",volume_step,ratio*volume_step);
      return(false);
   }
   
   return(true);
}

 

========================================================

 

E poi inserirli nella sezione "Init":

 

min_volume=MarketInfo(Symbol(),MODE_MINLOT);
max_volume=MarketInfo(Symbol(),MODE_MAXLOT);
volume_step=MarketInfo(Symbol(),MODE_LOTSTEP);

 

========================================================

 

Inserite anche il comando di chiamata di funzione nella sezione "start":

 

   if(!CheckLotSizeValue(LotSize))return;

 

Di solito è necessario inserirlo proprio all'inizio, in modo che l'EA verifichi prima la dimensione del lotto prima di passare al resto dei codici...

=========================================================

 

E questo è solo uno dei controlli, ci sono molti altri controlli che l'amministratore di MQL si aspetta che vengano inseriti, tra cui il controllo del margine libero, il controllo del livello di stop, il controllo del livello di congelamento, il controllo del limite dell'ordine pendente, il controllo del limite del volume del lotto e il controllo dell'errore 1 di Ordermodify. Fondamentalmente tutti questi controlli sono menzionati nell'articolo di MQL.

Inoltre, tutti i parametri esterni devono avere una funzione di controllo per verificare il valore di ciascun parametro, in modo che quando l'utente inserisce un valore non valido, l'EA richieda automaticamente un errore nel diario per avvisare l'utente e fermare l'EA.

 

Saluti,

Dave

 

0

scagnozzi

Cliente, bbp_partecipante, comunità, sq-ultimate, 487 risposte.

Visita il profilo

6 anni fa #143499

Qualcuno è in grado di fare una modifica MQL personalizzata del codice MQ4 al SQ, in modo che il lotsize appropriato passi direttamente dal SQ al codice della strategia? Quindi, se in SQ ho una dimensione del lotto di 0,08, questa verrà inserita subito dopo aver fatto clic sul codice MQ4? Se ho bisogno di cambiare questo in più di 100 stringhe, è molto sconvolgente.

Volete diventare un algotrader redditizio? Abbiamo iniziato a utilizzare il software StrateQuant all'inizio del 2014. Ora abbiamo un grande know-how per la costruzione di EA per ogni possibile tipo di mercato. Condividiamo questo know-how, le applicazioni, gli strumenti e anche tutte le strategie finali con i trader reali. Se volete unirvi a noi, compilate il seguente modulo MODULO.

0

daveng

Customer, bbp_participant, community, 93 replies.

Visita il profilo

6 anni fa #143502

Qualcuno è in grado di fare una modifica MQL personalizzata del codice MQ4 al SQ, in modo che il lotsize appropriato passi direttamente dal SQ al codice della strategia? Quindi, se in SQ ho una dimensione del lotto di 0,08, questa verrà inserita subito dopo aver fatto clic sul codice MQ4? Se ho bisogno di cambiare questo in più di 100 stringhe, è molto sconvolgente.

Se si intende modificare manualmente il valore predefinito della dimensione del lotto nei codici, è facile.

Nei codici, cercate "extern double Lots = 0,1;" che di solito si trova nella parte superiore dei codici, quindi modificate manualmente il valore in "0,08".

Salvate il tutto e ogni volta che eseguite l'EA utilizzerà un lotto predefinito di "0,08".

Ma se avete 100 EA, dovrete farlo manualmente per ogni EA. Non so se c'è un modo semplice per modificarlo in massa.

 

Saluti,

Dave

0

scagnozzi

Cliente, bbp_partecipante, comunità, sq-ultimate, 487 risposte.

Visita il profilo

6 anni fa #143503

Questo consiglio è inutile, so come farlo manualmente, so come farlo insieme per 100+ str in un solo click se il lotsize è lo stesso valore - ma per me ogni strategia commercia un lotsize diverso, che è già usato in SQ ed è memorizzato nel file STR. e voglio un modo semplice per inserire questo valore esatto nel codice MQL.

 

se non possiamo scrivere qualcosa di simile a quanto discusso - funzione MQL personalizzata

 

possiamo eseguire un qualche script (R, python, o altro) che cercherà la dimensione del lotto nel file STR e la inserirà automaticamente nel file MQ4.

Volete diventare un algotrader redditizio? Abbiamo iniziato a utilizzare il software StrateQuant all'inizio del 2014. Ora abbiamo un grande know-how per la costruzione di EA per ogni possibile tipo di mercato. Condividiamo questo know-how, le applicazioni, gli strumenti e anche tutte le strategie finali con i trader reali. Se volete unirvi a noi, compilate il seguente modulo MODULO.

0

Stai visualizzando 10 risposte - da 1 a 10 (di 10 totali)