Creatore di griglie 1.1 - pagina 3

 
Ciao di nuovo

grazie per la tua risposta ti aggiungerò quando torno a casa
 
Trovo che questo codice ha problemi a volte a mantenere la griglia perfetta (almeno quando lo eseguo come pullback e non come griglia di breakout). Ho visto buchi formarsi e non essere aggiornati e ho visto la griglia non formarsi completamente a volte con tutti e 10 gli ordini. Inoltre, sembra che non ami le impostazioni del tempo di aggiornamento che sono molto brevi e non capisco perché. Sembra che 15 minuti siano troppo lunghi per aggiornare una griglia (più come 15 secondi!) quindi questo è un grosso problema. Apprezzerei sapere se avete sperimentato qualcosa di questo. Ottimo lavoro, comunque, per riuscire ad andare avanti. Bel lavoro.
 
soma,

hai ragione, c'era un bug che qualcuno mi ha fatto notare e sembra essere stato risolto. ecco la nuova versione. Ho anche cambiato l'intervallo a 1 minuto - ma penso che da 15 a 30 minuti sia meglio... eviterà alcune contrattazioni quando il mercato si muove molto velocemente.

saluti,

//+------------------------------------------------------------------+ //| MakeGrid.mq4 | //| Copyright © 2005, hdb | //| http://www.dubois1.net/hdb | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, hdb" #property link "http://www.dubois1.net/hdb" //#property version "1.4beta" extern string GridName = "Grid"; // identifica la griglia. permette diverse griglie coesistenti extern double Lots = 0.1; // extern double GridSize = 6; // pips tra gli ordini - dimensione griglia o mesh extern double GridSteps = 12; // numero totale di ordini da piazzare extern double TakeProfit = 6 ; // numero di ticks per prendere profitto. normalmente è = dimensione griglia ma puoi sovrascrivere extern double StopLoss = 0; // se vuoi aggiungere uno stop loss. le griglie normali non usano stop loss extern double UpdateInterval = 1; // aggiorna gli ordini ogni x minuti extern bool wantLongs = true; // vogliamo posizioni long extern bool wantShorts = true; // vogliamo posizioni short extern bool wantBreakout = true; // vogliamo longs sopra prezzo, short sotto prezzo extern bool wantCounter = true; // vogliamo longs sotto prezzo, short sopra prezzo extern bool limitEMA34 = false;      // vogliamo solo longs sopra l'ema, short sotto l'ema extern double LastUpdate = 0; // contatore usato per notare il tempo dell'ultimo aggiornamento extern double GridMaxOpen = 0; // numero massimo di posizioni aperte //+------------------------------------------------------------------+ //| funzione di inizializzazione per esperti | //+------------------------------------------------------------------+ int init() { //---- #property show_inputs // mostra i parametri - grazie Slawa...    
 if ( TakeProfit <= 0 ) // { TakeProfit = GridSize; } //---- return(0); } //+------------------------------------------------------------------------+ //| testa se c'è una posizione aperta o un ordine nella regione di atRate | //| controllerà per i long se checkLongs è vero, altrimenti controllerà | //| per gli short | //+------------------------------------------------------------------------+ bool IsPosition(double atRate, double inRange, bool checkLongs ) { int totalorders = OrdersTotal();
     for(int j=0;j<totalorders;j++) // scansiona tutti gli ordini e le posizioni... { OrderSelect(j, SELECT_BY_POS); if ( OrderSymbol()==Symbol() && OrderComment() == GridName )  // cerca solo se mygrid e simbolo... { int type = OrderType(); if (MathAbs( OrderOpenPrice() - atRate ) < inRange) // non cerca il prezzo esatto ma la prossimità del prezzo (meno di gridsize) { if ( ( checkLongs && ( type == OP_BUY || type == OP_BUYLIMIT || type == OP_BUYSTOP ) )  || (!checkLongs && ( type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP ) ) ) { return(true); } } } } 

   return(false); } //+------------------------------------------------------------------+ //| funzione inizio programma script | //+------------------------------------------------------------------+ int start() { //---- int i, j,k, ticket, entermode, totalorders; bool doit; double point, startrate, traderate; //---- if (MathAbs(CurTime()-LastUpdate)> UpdateInterval*60) // aggiorniamo la prima volta che viene chiamata e ogni minuto di UpdateInterval { LastUpdate = CurTime();
   Print("Updating"); point = MarketInfo(Symbol(),MODE_POINT); startrate = ( Ask + point*GridSize/2 ) / point / GridSize; // arrotonda a un numero di tick divisibile per GridSize k = startrate ; k = k * GridSize ; startrate = k * point - GridSize*GridSteps/2*point ;          // calcola il punto di entrata più basso double EMA34=iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0); for( i=0;i<GridSteps;i++) { traderate = startrate + i*point*GridSize; if ( wantLongs && (!limitEMA34 || traderate > EMA34)) { if ( IsPosition(traderate,point*GridSize,true) == false )           // testate se non ho ordini aperti vicino al mio prezzo: se sì, mettetene uno { double myStopLoss = 0; if ( StopLoss > 0 ) { myStopLoss = traderate-point*StopLoss ; } if ( traderate > Ask ) { entermode = OP_BUYSTOP; } 
              else { entermode = OP_BUYLIMIT ; } 
              
              if ( ((traderate > Ask ) && (wantBreakout)) || ((traderate <= Ask ) && (wantCounter)) ) 

              { ticket=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate+point*TakeProfit,GridName,16384,0,Green); } } } } if ( wantShorts && (!limitEMA34 || traderate < EMA34)) { if (IsPosition(traderate,point*GridSize,false)== false )           // testate se non ho ordini aperti vicino al mio prezzo: se sì, mettetene uno { myStopLoss = 0; if ( StopLoss > 0 ) { myStopLoss = traderate+point*StopLoss ; } if ( traderate > Bid ) { entermode = OP_SELLLIMIT; } 
              else { entermode = OP_SELLSTOP ; } 
              
              if ( ((traderate < Bid ) && (wantBreakout)) || ((traderate >= Bid ) && (wantCounter)) ) 
                { ticket=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate-point*TakeProfit,GridName,16384,0,Red); } } } } } return(0); } //+------------------------------------------------------------------+
 
Grazie, hdb. Ma forse non capisco esattamente come pensi alle griglie, perché non riesco a vedere una ragione per cui aggiornare troppo presto sarebbe un male. La mancanza di una voce impedirebbe alla griglia di esprimere tutto il suo potenziale. Quando la eseguo manualmente, aggiorno gli ordini nel momento in cui cambia qualcosa. Eseguo griglie di pullback e non di breakout, quindi forse è qui che sta la differenza, ma con i pullback si trae profitto dal choppiness e quindi mantenere la griglia senza buchi è l'ideale.
 
soma,

sì, forse hai ragione... quindi la cosa migliore sarebbe aggiornare frequentemente ma solo alcuni slot di griglia? Non ho una forte opinione.

reagrds,
 
Beh, stavo aspettando un momento favorevole per postare un aggiornamento della griglia - dato che le sue prestazioni sono state davvero pessime di recente.
La settimana dopo il mio ultimo aggiornamento, ero in vacanza e la griglia era ferma. La settimana scorsa, la griglia era in funzione per la maggior parte del tempo.
L'ho spenta un paio di volte quando il margine di disponibilità era zero e ho impostato 'solo longs' sulla maggior parte delle major.
Oggi è stata una giornata di super ritorno.

Saldo : 93 (+10 da 10 giorni fa)
Margine utilizzato: +15k
Margine disponibile: +28k
p&l irreale: -49k (-11 da 10 giorni fa)
Saldo : 44k

Il netto è 1k peggiore di 10 giorni fa e 5k sotto il saldo iniziale.

La parte veramente difficile in tutto questo è cercare di limitare il drawdown. Devo davvero trovare il modo di farlo!
 
Penso che l'unico modo per evitare il drawdown sia quello di utilizzare metodi discrezionali
cioè sapere quando smettere di aggiungere ordini e quando, come hai fatto tu, smettere di aggiungere posizioni short.

Ho iniziato con un saldo di 100K dopo aver iniziato male usando un lotto troppo grande ed essere costretto a chiudere molte posizioni.

Saldo: 97 594.19 Saldo circa 2 settimane fa 83k
Margine libero: 6 016.88
P/L fluttuante: -38 960.45 era peggio di -56k
Margine: 52 616.86

l'ultimo paio di giorni era stato davvero lento il livello di margine era basso come 93%

ma ora tutte le major sembrano aver fatto un giro di boa per il momento
il livello di margine è tornato al 130% circa
 
Sono d'accordo, darkstonexa, penso che tu possa avere ragione - ma sto testando alcune variazioni automatiche basate su ema e macd... non sono troppo ottimista però.

Un amico ne ha anche uno con uno stoploss in funzione... e sta lottando per rimanere a galla! Questo risolve davvero il problema del drawdown però!

Nel frattempo, ho ripulito le mie posizioni - tutte le posizioni con un forte carry interest negativo e ben in perdita (qualche 100 pips) sono state chiuse.

Così le mie griglie ora sono pronte per un altro colpo in testa (margine bact al 430%)!
 
Beh, che bei 2 giorni abbiamo avuto... ieri ho visto la mia griglia +5k in verde (l'equity era 54k, ho iniziato con 49k) dopo settimane di trading piuttosto catastrofico.

Per fortuna possiamo provare su conti demo!

Ora che sono tornato in una posizione "ragionevole", ho impostato tutte le coppie di valute per fare quanto segue:
1) scambiare solo nella direzione del carry interest positivo (a meno che l'interesse non sia vicino a 0, in quel caso lo faccio in entrambi i modi)
2) lungo solo sopra la 34 ema, corto solo sotto la 34 ema
3) per le valute a 2 vie, usa macd sul grafico a 5 minuti per decidere se long o short

Vedremo cosa ne risulta!

ps. Vorrei che il back testing funzionasse!
 
Ciao hdb,

Ho preso il tuo consulente su EURUSD, facendo trading su entrambi i lati come breakout.

Ora vorrei chiederti se hai già incontrato il seguente problema:

Dopo un po' di tempo, ho più di un ordine su alcune posizioni della stessa griglia. A volte sono due, ma ne ho visti anche 5 e più.

Per quanto capisco il codice, solo uno dovrebbe essere aperto in una posizione della griglia alla volta.

Ho pasticciato convertendo tutti i doppi in int prima di confrontarli perché in MQL2 ho trovato un problema simile quando si confrontano valori doppi.

Hai incontrato qualcosa di simile?

Con i miei saluti,

cori