COSTRUZIONE INDICATORE PER ANALISI CICLICA CON VISUAL TRADER (4 lettori)

robom1

Forumer storico
Questo è un grafico dove viene plottato condizione1 e condizione2 (ovvero i livelli che vengono definiti alle 09.10).
Lui riesce a determinarli il giorno 17 perche c'è una candela che termina alle 09.10 e qualcosa; se si vede i giorni 18, 19 e 22 rimane lo stesso livello perche appunto non trovandolo è quello del giorno prima (quello del 17) a meno che non sia stato ridefinito dal trailing.

condizione1-2.GIF
 

robom1

Forumer storico
comunque i livelli si possono tracciare in una qualche maniera correttamente anche senza aspettare traderlink, ma dopo le rese calano drasticamente probabilmente per il fatto del +30/-30 e/o per il fatto che i livelli dovrebbero essere calcolati dinamicamente in funzione delle candele stesse.
 

solospread

Forumer storico
comunque i livelli si possono tracciare in una qualche maniera correttamente anche senza aspettare traderlink, ma dopo le rese calano drasticamente probabilmente per il fatto del +30/-30 e/o per il fatto che i livelli dovrebbero essere calcolati dinamicamente in funzione delle candele stesse.
Infatti se le stesse condizioni si plottano sul 5 minuti i livelli cambiano regolarmente. Ho anche cambiato il +30 con +20, ma non si ottengono grandi benefici.
 

robom1

Forumer storico
Infatti se le stesse condizioni si plottano sul 5 minuti i livelli cambiano regolarmente. Ho anche cambiato il +30 con +20, ma non si ottengono grandi benefici.

si ok, ma sopra non si parlava dell'ntick?
io intendevo dire che le modifiche si possono fare sull'ntick in maniera tale che, come si vede sopra, reperisca i livelli corretti. Solo che poi dopo occorrerà definire in maniera piu' oppurtuna il quid +30 e -30; se erano o si adattavano ad una candela ad un minuto che puo' avere al massimo mediamente 10-20 vendite è chiaro che dovrebbe essere ampliato se la candela contiene al minimo da 75 contratti in su.
 

Damien

Nessuno è mai al sicuro
Ciao Damien e benvenuto in questo 3d. La differenza tra realtime e backtest è che con quest'ultimo conosciamo già quello che è successo (O,C,L,H eR) mentre in realtime deve ancora succedere. E' per questo che nel caso specifico del trailing anche se lo installiamo nel migliore dei modi ci sarà sempre una leggera differenza tra le uscite in real e back. Con la versione beta c'è però la possibilità di aggiungere la funzione "EXITONLYIFCLOSEON" che ci farà uscire al raggiungimento del livello prefissato, ma solo all'Open della candela successiva. In questo caso ci sarà una perfetta corrispondenza tra realtà e fantascienza.


Si io uso checkmax + EXITONLYIFCLOSEON.
Appunto ho parlato anche della funzione installtrailingprofit che nella versione tuttora standard genera equivoci del tipo menzionati sopra. Mi pare che con la beta16 le cose vadano molto meglio a questo proposito.

Aggiungo che, per garantire la continuità con la standard, è possibile attivare l'opzione AllowEnterAfterExit a true di default a false. In questo modo il Visual Trader effettuerà, ove richiesto dal vostro codice, più di un'operazione sulla stessa candela.
Ma, come abbiamo ben capito, questo può essere falso ed illusorio :-?.

Ciao.
 

solospread

Forumer storico
Ho messo questa funzione e non capisco perchè se la attivo nei due orari in cuo l'ho disattivata il TS non funziona. In pratica quello che ho scritto e che io voglio che si realizzi è
1) se è vero che l'ultima operazione si è chiusa in STOP
2) l'ultima operazione chiusa era LONG o SHORT (1,-1)
3) se C > RIENTROLONG
Nelle due fasce 10 e 14 se lo attivo il TS non funziona piu'
Forse in quei due orari si è verificato qualche condizione contrastante?
Codice:
if LastOpIsStop = TRUE  and LastOpClosed = 1 then
RIENTROLONG = ValExit +10;endif;
//PlotChart(miacondizione3,0,red,solid,2);

if LastOpIsStop = TRUE and LastOpClosed = -1 then
RIENTROSHORT = ValExit - 10;endif;
//PlotChart(miacondizione4,0,blue,solid,2);
//**************************************************************************************************************************************************

if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0) then
       if C > Miacondizione1  and semaforo0910 <>  1  and C > C[1] then EnterLong(NextBar, AtOpen); semaforo0910 =  1; ultimaposizione =  1; endif;
         if LastOpIsStop = TRUE  and LastOpClosed = 1 and semaforo0910 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo0910 = 1; ultimaposizione =1; endif;
       if C < Miacondizione2  and semaforo0910 <> -1 and C < C[1]then EnterShort(NextBar,AtOpen); semaforo0910 = -1; ultimaposizione = -1; endif;
        if LastOpIsStop = TRUE  and LastOpClosed = -1 and semaforo0910 <> -1 and C < RIENTROSHORT and C < C[1]then Entershort(Nextbar,atopen); semaforo0910 = -1; ultimaposizione = -1; endif;
endif;
if (CompareTime(10, 10, 0) > 0) and(CompareTime(11,09, 0) < 0) then
       if C > Miacondizione3  and semaforo1010 <>  1   and C > C[1]then EnterLong(NextBar, AtOpen); semaforo1010 =  1; ultimaposizione =  1; endif;
       if LastOpIsStop = TRUE  and LastOpClosed = 1 and semaforo1010 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo1010 = 1; ultimaposizione =1; endif;
       if C < Miacondizione4  and semaforo1010 <> -1  and C < C[1]then EnterShort(NextBar,AtOpen); semaforo1010 = -1; ultimaposizione = -1; endif;
     if LastOpIsStop = TRUE  and LastOpClosed = -1 and semaforo1010 <> -1 and C < RIENTROSHORT and C < C[1]then Entershort(Nextbar,atopen); semaforo1010 = -1; ultimaposizione = -1; endif;
       
endif;
if (CompareTime(11, 10, 0) > 0) and (CompareTime(12,09, 0) < 0) then
       if C > Miacondizione5  and semaforo1110 <>  1   and C > C[1]then EnterLong(NextBar, AtOpen); semaforo1110 =  1; ultimaposizione =  1; endif;
        if LastOpIsStop = TRUE  and LastOpClosed = 1 and semaforo1110 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo1110 = 1; ultimaposizione =1; endif;
       if C < Miacondizione6  and semaforo1110 <> -1   and C < C[1]then EnterShort(NextBar,AtOpen); semaforo1110 = -1; ultimaposizione = -1; endif;
        if LastOpIsStop = TRUE  and LastOpClosed = -1 and semaforo1110 <> 1 and C < RIENTROSHORT and C < C[1]then Entershort(Nextbar,atopen); semaforo1110 = -1; ultimaposizione = -1; endif;
endif;
if (CompareTime(12, 10, 0) > 0) and (CompareTime(13,09, 0) < 0) then
       if C > Miacondizione7  and semaforo1210 <>  1   and C > C[1]then EnterLong(NextBar, AtOpen); semaforo1210 =  1; ultimaposizione =  1; endif;
         if LastOpIsStop = TRUE  and LastOpClosed = 1 and semaforo1210 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo1210 = 1; ultimaposizione =1; endif;
       if C < Miacondizione8  and semaforo1210 <> -1   and C < C[1]then EnterShort(NextBar,AtOpen); semaforo1210 = -1; ultimaposizione = -1; endif;
       if LastOpIsStop = TRUE  and LastOpClosed = -1 and semaforo1210 <> 1 and C < RIENTROSHORT and C < C[1]then Entershort(Nextbar,atopen); semaforo1210 = -1; ultimaposizione = -1; endif;
endif;
if (CompareTime(13, 10, 0) > 0) and (CompareTime(14,09, 0) < 0) then
       if C > Miacondizione9  and semaforo1310 <>  1   and C > C[1]then EnterLong(NextBar, AtOpen); semaforo1310 =  1; ultimaposizione =  1; endif;
         if LastOpIsStop = TRUE  and LastOpClosed = 1 and semaforo1310 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo1310 = 1; ultimaposizione =1; endif;
       if C < Miacondizione10 and semaforo1310 <> -1   and C < C[1]then EnterShort(NextBar,AtOpen); semaforo1310 = -1; ultimaposizione = -1; endif;
       if LastOpIsStop = TRUE  and LastOpClosed = -1 and semaforo1310 <> 1 and C < RIENTROSHORT and C < C[1]then Entershort(Nextbar,atopen); semaforo1310 = -1; ultimaposizione = -1; endif;
endif;
if (CompareTime(14, 10, 0) > 0) and (CompareTime(15,09, 0) < 0) then
       if C > Miacondizione11 and semaforo1410 <>  1 and C > C[1]then EnterLong(NextBar, AtOpen); semaforo1410 =  1; ultimaposizione =  1; endif;
         if LastOpIsStop = TRUE  and LastOpClosed = 1 and semaforo1410 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo1410 = 1; ultimaposizione =1; endif;
       if C < Miacondizione12 and semaforo1410 <> -1   and C < C[1]then EnterShort(NextBar,AtOpen); semaforo1410 = -1; ultimaposizione = -1; endif;
       if LastOpIsStop = TRUE  and LastOpClosed = -1 and semaforo1410 <> -1 and C < RIENTROSHORT and C < C[1]then Entershort(Nextbar,atopen); semaforo1410 = -1; ultimaposizione = -1; endif;
endif;
if (CompareTime(15, 10, 0) > 0) and (CompareTime(16,09, 0) < 0) then
       if C > Miacondizione13 and semaforo1510 <>  1   and C > C[1]then EnterLong(NextBar, AtOpen); semaforo1510 =  1; ultimaposizione =  1; endif;
         if LastOpIsStop = TRUE  and LastOpClosed = 1 and semaforo1510 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo1510 = 1; ultimaposizione =1; endif;
       if C < Miacondizione14 and semaforo1510 <> -1   and C < C[1]then EnterShort(NextBar,AtOpen); semaforo1510 = -1; ultimaposizione = -1; endif;
       if LastOpIsStop = TRUE  and LastOpClosed = -1 and semaforo1510 <> -1 and C < RIENTROSHORT and C < C[1]then Entershort(Nextbar,atopen); semaforo1510 = -1; ultimaposizione = -1; endif;
endif;
if (CompareTime(16, 10, 0) > 0) and (CompareTime(17,09, 0) < 0) then
       if C > Miacondizione15 and semaforo1610 <>  1   and C > C[1]then EnterLong(NextBar, AtOpen); semaforo1610 =  1; ultimaposizione =  1; endif;
         if LastOpIsStop = TRUE  and LastOpClosed = 1 and semaforo1610 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo1610 = 1; ultimaposizione =1; endif;
       if C < Miacondizione16 and semaforo1610 <> -1  and C < C[1]then EnterShort(NextBar,AtOpen); semaforo1610 = -1; ultimaposizione = -1; endif;
       if LastOpIsStop = TRUE  and LastOpClosed = -1 and semaforo1610 <> 1 and C < RIENTROSHORT and C < C[1]then Entershort(Nextbar,atopen); semaforo1610 = -1; ultimaposizione = -1; endif;
endif;
if (CompareTime(17, 10, 0) > 0) and (CompareTime(17,30, 0) < 0) then
       if C > Miacondizione17 and semaforo1710 <>  1  and C > C[1]then EnterLong(NextBar, AtOpen); semaforo1710 =  1; ultimaposizione =  1; endif;
         if LastOpIsStop = TRUE  and LastOpClosed = 1 and semaforo1710 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo1710 = 1; ultimaposizione =1; endif;
       if C < Miacondizione18 and semaforo1710 <> -1   and C < C[1]then EnterShort(NextBar, AtOpen);semaforo1710 = -1; ultimaposizione = -1; endif;
       if LastOpIsStop = TRUE  and LastOpClosed = -1 and semaforo1710 <> 1 and C < RIENTROSHORT and C < C[1]then Entershort(Nextbar,atopen); semaforo1710 = -1; ultimaposizione = -1; endif;
endif;/CODE]
 
Ultima modifica:

solospread

Forumer storico
la stringa che mi interessa è questa, per non far confusione:
if LastOpIsStop = TRUE and LastOpClosed = 1 and semaforo1710 <> 1 and C > RIENTROLONG and C > C[1]then Enterlong(Nextbar,atopen); semaforo1710 = 1; ultimaposizione =1; endif;
 

robom1

Forumer storico
Non ti potrà mai entrare perche quando c'è un ritracciamento viene cambiato anche il valore della condizione che è uguale e C+30; quindi se miacondizione 1 è gia c+30 di sicuro non potra mai essere superiore a se stessa piu 10.

//Identifica il livello del ritracciamento
if lastopisstop = false then vettorestop = 0; colorbar(lime); endif;
if lastopisstop = true then vettorestop = 1; colorbar(red); endif;
if vettorestop[1] <> vettorestop and vettorestop = 1 then
if ultimaposizione = 1 then valoreritracciamento = H[1];
if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0) then Miacondizione1 = H[1] + 30; semaforo0910 = 0; endif;
if (CompareTime(10, 10, 0) > 0) and (CompareTime(11,09, 0) < 0) then Miacondizione3 = H[1] + 30; semaforo1010 = 0; endif;
if (CompareTime(11, 10, 0) > 0) and (CompareTime(12,09, 0) < 0) then Miacondizione5 = H[1] + 30; semaforo1110 = 0; endif;
if (CompareTime(12, 10, 0) > 0) and (CompareTime(13,09, 0) < 0) then Miacondizione7 = H[1] + 30; semaforo1210 = 0; endif;
if (CompareTime(13, 10, 0) > 0) and (CompareTime(14,09, 0) < 0) then Miacondizione9 = H[1] + 30; semaforo1310 = 0; endif;
if (CompareTime(14, 10, 0) > 0) and (CompareTime(15,09, 0) < 0) then Miacondizione11= H[1] + 30; semaforo1410 = 0; endif;
if (CompareTime(15, 10, 0) > 0) and (CompareTime(16,09, 0) < 0) then Miacondizione13= H[1] + 30; semaforo1510 = 0; endif;
if (CompareTime(16, 10, 0) > 0) and (CompareTime(17,09, 0) < 0) then Miacondizione15= H[1] + 30; semaforo1610 = 0; endif;
if (CompareTime(17, 10, 0) > 0) and (CompareTime(17,30, 0) < 0) then Miacondizione17= H[1] + 30; semaforo1710 = 0; endif;
endif;
if ultimaposizione = -1 then valoreritracciamento = L[1];
if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0) then Miacondizione2 = L[1] - 30; semaforo0910 = 0; endif;
if (CompareTime(10, 10, 0) > 0) and (CompareTime(11,09, 0) < 0) then Miacondizione4 = L[1] - 30; semaforo1010 = 0; endif;
if (CompareTime(11, 10, 0) > 0) and (CompareTime(12,09, 0) < 0) then Miacondizione6 = L[1] - 30; semaforo1110 = 0; endif;
if (CompareTime(12, 10, 0) > 0) and (CompareTime(13,09, 0) < 0) then Miacondizione8 = L[1] - 30; semaforo1210 = 0; endif;
if (CompareTime(13, 10, 0) > 0) and (CompareTime(14,09, 0) < 0) then Miacondizione10= L[1] - 30; semaforo1310 = 0; endif;
if (CompareTime(14, 10, 0) > 0) and (CompareTime(15,09, 0) < 0) then Miacondizione12= L[1] - 30; semaforo1410 = 0; endif;
if (CompareTime(15, 10, 0) > 0) and (CompareTime(16,09, 0) < 0) then Miacondizione14= L[1] - 30; semaforo1510 = 0; endif;
if (CompareTime(16, 10, 0) > 0) and (CompareTime(17,09, 0) < 0) then Miacondizione16= L[1] - 30; semaforo1610 = 0; endif;
if (CompareTime(17, 10, 0) > 0) and (CompareTime(17,30, 0) < 0) then Miacondizione18= L[1] - 30; semaforo1710 = 0; endif;
endif;
endif;



Per cambiare è sufficiente che quando esce il trailing cambi il valore
tipo invece di:

Miacondizione1 = H[1] + 30; semaforo0910 = 0; endif;

mettere:

Miacondizione1 = H[1] + 10; semaforo0910 = 0; endif;

una volta che modifichi il valore nella routine del ritracciamento e cancelli valexit ecc.ecc. è sufficiente questo.

Comunque tale routine non gestisce piu uscite in trailing successive.
 

solospread

Forumer storico
Non ti potrà mai entrare perche quando c'è un ritracciamento viene cambiato anche il valore della condizione che è uguale e C+30; quindi se miacondizione 1 è gia c+30 di sicuro non potra mai essere superiore a se stessa piu 10.

//Identifica il livello del ritracciamento
if lastopisstop = false then vettorestop = 0; colorbar(lime); endif;
if lastopisstop = true then vettorestop = 1; colorbar(red); endif;
if vettorestop[1] <> vettorestop and vettorestop = 1 then
if ultimaposizione = 1 then valoreritracciamento = H[1];
if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0) then Miacondizione1 = H[1] + 30; semaforo0910 = 0; endif;
if (CompareTime(10, 10, 0) > 0) and (CompareTime(11,09, 0) < 0) then Miacondizione3 = H[1] + 30; semaforo1010 = 0; endif;
if (CompareTime(11, 10, 0) > 0) and (CompareTime(12,09, 0) < 0) then Miacondizione5 = H[1] + 30; semaforo1110 = 0; endif;
if (CompareTime(12, 10, 0) > 0) and (CompareTime(13,09, 0) < 0) then Miacondizione7 = H[1] + 30; semaforo1210 = 0; endif;
if (CompareTime(13, 10, 0) > 0) and (CompareTime(14,09, 0) < 0) then Miacondizione9 = H[1] + 30; semaforo1310 = 0; endif;
if (CompareTime(14, 10, 0) > 0) and (CompareTime(15,09, 0) < 0) then Miacondizione11= H[1] + 30; semaforo1410 = 0; endif;
if (CompareTime(15, 10, 0) > 0) and (CompareTime(16,09, 0) < 0) then Miacondizione13= H[1] + 30; semaforo1510 = 0; endif;
if (CompareTime(16, 10, 0) > 0) and (CompareTime(17,09, 0) < 0) then Miacondizione15= H[1] + 30; semaforo1610 = 0; endif;
if (CompareTime(17, 10, 0) > 0) and (CompareTime(17,30, 0) < 0) then Miacondizione17= H[1] + 30; semaforo1710 = 0; endif;
endif;
if ultimaposizione = -1 then valoreritracciamento = L[1];
if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0) then Miacondizione2 = L[1] - 30; semaforo0910 = 0; endif;
if (CompareTime(10, 10, 0) > 0) and (CompareTime(11,09, 0) < 0) then Miacondizione4 = L[1] - 30; semaforo1010 = 0; endif;
if (CompareTime(11, 10, 0) > 0) and (CompareTime(12,09, 0) < 0) then Miacondizione6 = L[1] - 30; semaforo1110 = 0; endif;
if (CompareTime(12, 10, 0) > 0) and (CompareTime(13,09, 0) < 0) then Miacondizione8 = L[1] - 30; semaforo1210 = 0; endif;
if (CompareTime(13, 10, 0) > 0) and (CompareTime(14,09, 0) < 0) then Miacondizione10= L[1] - 30; semaforo1310 = 0; endif;
if (CompareTime(14, 10, 0) > 0) and (CompareTime(15,09, 0) < 0) then Miacondizione12= L[1] - 30; semaforo1410 = 0; endif;
if (CompareTime(15, 10, 0) > 0) and (CompareTime(16,09, 0) < 0) then Miacondizione14= L[1] - 30; semaforo1510 = 0; endif;
if (CompareTime(16, 10, 0) > 0) and (CompareTime(17,09, 0) < 0) then Miacondizione16= L[1] - 30; semaforo1610 = 0; endif;
if (CompareTime(17, 10, 0) > 0) and (CompareTime(17,30, 0) < 0) then Miacondizione18= L[1] - 30; semaforo1710 = 0; endif;
endif;
endif;



Per cambiare è sufficiente che quando esce il trailing cambi il valore
tipo invece di:

Miacondizione1 = H[1] + 30; semaforo0910 = 0; endif;

mettere:

Miacondizione1 = H[1] + 10; semaforo0910 = 0; endif;

una volta che modifichi il valore nella routine del ritracciamento e cancelli valexit ecc.ecc. è sufficiente questo.

Comunque tale routine non gestisce piu uscite in trailing successive.

Io ho cambiato H[1] ed L[1] con valexit cioè il valore dell'ultima uscita.
Rientrolong = valexit+10
Mi entra in tutti gli orari meno le 10 e le 14.
 

Users who are viewing this thread

Alto