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

robom1

Forumer storico
Quello che vorrei facesse il ts è questo.
Se esce in trailing e solo in questo caso per rientrare nella stessa direzione il livello di rientro deve essere RIENTROLONG = ValExit+10. Inoltre se esce in trailing deve togliere il comando a C > Miacondizionex , mentre deve continuare a mantenere la sua validità per le entrate in senso contrario. Questo fino allo step successivo dove tutto torna come prima.


Adesso io purtroppo io devo continuare il mio lavoro che domattina ho una riunione; intanto ti invio questa versione che semplifica molto il codice solo che non viene come a te (da verificare).
Di sicuro il giro del ritracciamento lo fa solo quando va in trailing e gli applica il valexit+10.
Il comando c>miacondizione in realtà mia condizione è valexit+10 quindi va già bene.
al limite se si vuole si puo' mettere c > c precedente e viceversa che manca nelle condizioni dell'enterlong.
Ho visto che in fondo c'è un problema perche esce in trailing e rientra subito quindi c'è un orario proprio nel mezzo.
per il momento vi saluto e ci risentiamo sperando che vada bene.




Codice:
{******************************************************************************
* Nuovo trading-system. 
* Aggiungere in questo punto i Vostri commenti, che vi aiuteranno
* in seguito a ricordare le linee guida di trading che intendete
* automatizzare .
******************************************************************************}
Var: miavar(0), Miacondizione1(19000),Miacondizione2(19000),miacondizione3,Miacondizione4,Miacondizione5,Miacondizione6;
Var: Miacondizione7,Miacondizione8, Miacondizione9,Miacondizione10, Miacondizione11,Miacondizione12, Miacondizione13,Miacondizione14;
Var: Miacondizione15,Miacondizione16,Miacondizione17,miacondizione18,STOP;
Var: Semaforo0910(0), semaforo1010(0), semaforo1110(0), Semaforo1210(0), semaforo1310(0), semaforo1410(0),Semaforo1510(0), semaforo1610(0), semaforo1710(0);
Var: ultimaposizione(0), indzona1(0), valoreritracciamento(0), valore(0), ultimoprezzo(0), barra(0), ope1(0), min1(0), max1(0), clo1(0), ritracciamentocalcolato(0);
Var: miavel, mio10, vettorestop(0), pippo(0), vettoreposizione(0);
installtrailingprofit (inperc,0.8,0.1,trailing);

//************************************************** ************************************************** ************
if T = 0910 then Miacondizione1 = C+20; Miacondizione2 = C-20; endif;
if T = 1010 then Miacondizione3 = C+20; Miacondizione4 = C-20; endif;
if T = 1110 then Miacondizione5 = C+20; Miacondizione6 = C-20; endif;
if T = 1210 then Miacondizione7 = C+20; Miacondizione8 = C-20; endif;
if T = 1310 then Miacondizione9 = C+20; Miacondizione10= C-20; endif;
if T = 1410 then Miacondizione11= C+20; Miacondizione12= C-20; endif;
if T = 1510 then Miacondizione13 =C+20; Miacondizione14= C-20; endif;
if T = 1610 then Miacondizione15 =C+20; Miacondizione16= C-20; endif;
if T = 1710 then Miacondizione17 =C+20; Miacondizione18= C-20; endif;
//************************************************** ************************************************** *********************
//Non si riesce a capire perche ma se metto il controllo in T = non lo prende, probabilmente perche delle barre potrebbero mancare
//in assenza di contrattazione
if T >=0910 and T <= 1009 then if positiondir = 1 then semaforo0910 = 1; endif; if positiondir = - 1 then semaforo0910 = - 1; endif; endif;
if T >=1010 and T <= 1109 then if positiondir = 1 then semaforo1010 = 1; endif; if positiondir = - 1 then semaforo1010 = - 1; endif; endif;
if T >=1110 and T <= 1209 then if positiondir = 1 then semaforo1110 = 1; endif; if positiondir = - 1 then semaforo1110 = - 1; endif; endif;
if T >=1210 and T <= 1309 then if positiondir = 1 then semaforo1210 = 1; endif; if positiondir = - 1 then semaforo1210 = - 1; endif; endif;
if T >=1310 and T <= 1409 then if positiondir = 1 then semaforo1310 = 1; endif; if positiondir = - 1 then semaforo1310 = - 1; endif; endif;
if T >=1410 and T <= 1509 then if positiondir = 1 then semaforo1410 = 1; endif; if positiondir = - 1 then semaforo1410 = - 1; endif; endif;
if T >=1510 and T <= 1609 then if positiondir = 1 then semaforo1510 = 1; endif; if positiondir = - 1 then semaforo1510 = - 1; endif; endif;
if T >=1610 and T <= 1709 then if positiondir = 1 then semaforo1610 = 1; endif; if positiondir = - 1 then semaforo1610 = - 1; endif; endif;
if T >=1710 and T <= 1730 then if positiondir = 1 then semaforo1710 = 1; endif; if positiondir = - 1 then semaforo1710 = - 1; endif; endif;
//************************************************** ************************************************** ***************************************
//Identifica il livello del ritracciamento
//Con vettoreposizione mi salvo la posizione del sistema in ogni barra
//Se la posizione attuale è flat e la precedente era long e lastopisstop = true vuole dire (fino a quando non attiviamo lo stoploss che
//è uscito in trailing
vettoreposizione = positiondir;
if vettoreposizione = 0 and vettoreposizione[1] = 1  and LastopIsStop = true then valoreritracciamento = valexit;
               if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0) then Miacondizione1 = valexit + 10; semaforo0910 = 0; endif;
               if (CompareTime(10, 10, 0) > 0) and (CompareTime(11,09, 0) < 0) then Miacondizione3 = valexit + 10; semaforo1010 = 0; endif;
               if (CompareTime(11, 10, 0) > 0) and (CompareTime(12,09, 0) < 0) then Miacondizione5 = valexit + 10; semaforo1110 = 0; endif;
               if (CompareTime(12, 10, 0) > 0) and (CompareTime(13,09, 0) < 0) then Miacondizione7 = valexit + 10; semaforo1210 = 0; endif;
               if (CompareTime(13, 10, 0) > 0) and (CompareTime(14,09, 0) < 0) then Miacondizione9 = valexit + 10; semaforo1310 = 0; endif;
               if (CompareTime(14, 10, 0) > 0) and (CompareTime(15,09, 0) < 0) then Miacondizione11= valexit + 10; semaforo1410 = 0; endif;
               if (CompareTime(15, 10, 0) > 0) and (CompareTime(16,09, 0) < 0) then Miacondizione13= valexit + 10; semaforo1510 = 0; endif;
               if (CompareTime(16, 10, 0) > 0) and (CompareTime(17,09, 0) < 0) then Miacondizione15= valexit + 10; semaforo1610 = 0; endif;
               if (CompareTime(17, 10, 0) > 0) and (CompareTime(17,30, 0) < 0) then Miacondizione17= valexit + 10; semaforo1710 = 0; endif;
       endif;
       
if vettoreposizione = 0 and vettoreposizione[1] = -1 and LastopIsStop = true then valoreritracciamento = valexit;
               if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0) then Miacondizione2 = valexit - 10; semaforo0910 = 0; endif;
               if (CompareTime(10, 10, 0) > 0) and (CompareTime(11,09, 0) < 0) then Miacondizione4 = valexit - 10; semaforo1010 = 0; endif;
               if (CompareTime(11, 10, 0) > 0) and (CompareTime(12,09, 0) < 0) then Miacondizione6 = valexit - 10; semaforo1110 = 0; endif;
               if (CompareTime(12, 10, 0) > 0) and (CompareTime(13,09, 0) < 0) then Miacondizione8 = valexit - 10; semaforo1210 = 0; endif;
               if (CompareTime(13, 10, 0) > 0) and (CompareTime(14,09, 0) < 0) then Miacondizione10= valexit - 10; semaforo1310 = 0; endif;
               if (CompareTime(14, 10, 0) > 0) and (CompareTime(15,09, 0) < 0) then Miacondizione12= valexit - 10; semaforo1410 = 0; endif;
               if (CompareTime(15, 10, 0) > 0) and (CompareTime(16,09, 0) < 0) then Miacondizione14= valexit - 10; semaforo1510 = 0; endif;
               if (CompareTime(16, 10, 0) > 0) and (CompareTime(17,09, 0) < 0) then Miacondizione16= valexit - 10; semaforo1610 = 0; endif;
               if (CompareTime(17, 10, 0) > 0) and (CompareTime(17,30, 0) < 0) then Miacondizione18= valexit - 10; semaforo1710 = 0; endif;
       endif;
//************************************************** ************************************************** **********************************************
if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0) then
if C > Miacondizione1 and semaforo0910 <> 1  then EnterLong(NextBar, AtOpen); semaforo0910 = 1;  endif;
if C < Miacondizione2 and semaforo0910 <> -1 then EnterShort(NextBar,AtOpen); semaforo0910 = -1; endif;
endif;
if (CompareTime(10, 10, 0) > 0) and(CompareTime(11,09, 0) < 0) then
if C > Miacondizione3 and semaforo1010 <> 1  then EnterLong(NextBar, AtOpen); semaforo1010 = 1;   endif;
if C < Miacondizione4 and semaforo1010 <> -1 then EnterShort(NextBar,AtOpen); semaforo1010 = -1; endif;
endif;
if (CompareTime(11, 10, 0) > 0) and (CompareTime(12,09, 0) < 0) then
if C > Miacondizione5 and semaforo1110 <> 1  then EnterLong(NextBar, AtOpen); semaforo1110 = 1;   endif;
if C < Miacondizione6 and semaforo1110 <> -1 then EnterShort(NextBar,AtOpen); semaforo1110 = -1; endif;
endif;
if (CompareTime(12, 10, 0) > 0) and (CompareTime(13,09, 0) < 0) then
if C > Miacondizione7 and semaforo1210 <> 1  then EnterLong(NextBar, AtOpen); semaforo1210 = 1;   endif;
if C < Miacondizione8 and semaforo1210 <> -1 then EnterShort(NextBar,AtOpen); semaforo1210 = -1; endif;
endif;
if (CompareTime(13, 10, 0) > 0) and (CompareTime(14,09, 0) < 0) then
if C > Miacondizione9 and semaforo1310 <> 1  then EnterLong(NextBar, AtOpen); semaforo1310 = 1;   endif;
if C < Miacondizione10 and semaforo1310 <>-1 then EnterShort(NextBar,AtOpen); semaforo1310 = -1;endif;
endif;
if (CompareTime(14, 10, 0) > 0) and (CompareTime(15,09, 0) < 0) then
if C > Miacondizione11 and semaforo1410 <> 1 then EnterLong(NextBar, AtOpen); semaforo1410 = 1;  endif;
if C < Miacondizione12 and semaforo1410 <>-1 then EnterShort(NextBar,AtOpen); semaforo1410 = -1;endif;
endif;
if (CompareTime(15, 10, 0) > 0) and (CompareTime(16,09, 0) < 0) then
if C > Miacondizione13 and semaforo1510 <> 1 then EnterLong(NextBar, AtOpen); semaforo1510 = 1;   endif;
if C < Miacondizione14 and semaforo1510 <>-1 then EnterShort(NextBar,AtOpen); semaforo1510 = -1; endif;
endif;
if (CompareTime(16, 10, 0) > 0) and (CompareTime(17,09, 0) < 0) then
if C > Miacondizione15 and semaforo1610 <> 1 then EnterLong(NextBar, AtOpen); semaforo1610 = 1;   endif;
if C < Miacondizione16 and semaforo1610 <>-1 then EnterShort(NextBar,AtOpen); semaforo1610 = -1; endif;
endif;
if (CompareTime(17, 10, 0) > 0) and (CompareTime(17,30, 0) < 0) then
if C > Miacondizione17 and semaforo1710 <> 1 then EnterLong(NextBar, AtOpen); semaforo1710 = 1;   endif;
if C < Miacondizione18 and semaforo1710 <>-1 then EnterShort(NextBar, AtOpen);semaforo1710 = -1; endif;
endif;
//************************************************** ************************************************** **************************************************

if t>=1732 then
if positiondir=1 then
exitlong(bar,atclose);
endif;
if positiondir=-1 then
exitshort(bar,atclose);
endif;
endif;
if lastbar = true then
Semaforo0910 = 0;
Semaforo1010 = 0;
semaforo1110 = 0;
Semaforo1210 = 0;
semaforo1310 = 0;
semaforo1410 = 0;
Semaforo1510 = 0;
semaforo1610 = 0;
semaforo1710 = 0;
endif;
Indzona1 = CreateViewport(100, 0, true);

//PlotChart (miacondizione1, 0, fuchsia, solid, 3);
PlotChart (valoreritracciamento, 0, black, solid, 2);
/PlotChart (e, 0, black, solid, 2);
 

robom1

Forumer storico
un'ultima cosa che sono ancora in giro; secondo me valexit non è corretto perche lui dovrebbe rientrare al max min della barra se deve andare in breakout (in sostanza sarebbe la rottura della barra + 2 ticks).
 

Damien

Nessuno è mai al sicuro
Ragazzi una domanda ...
C'è qualche motivo specifico per cui usate la funzione CompareTime, invece che semplicemente T?

Voi scrivete :
if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0)

Non si potrebbe scrivere if t>0910 and t<1009 ?

Forse t o time funziona male ed e necessario usare comparetime? A me non risulta.
 

solospread

Forumer storico
un'ultima cosa che sono ancora in giro; secondo me valexit non è corretto perche lui dovrebbe rientrare al max min della barra se deve andare in breakout (in sostanza sarebbe la rottura della barra + 2 ticks).
Ti ringrazio per la tua disponibilità. Ora lo scarico e stasera lo provo,poi ti sò dire. Buona giornata e buona riunione per oggi.
 

solospread

Forumer storico
Ragazzi una domanda ...
C'è qualche motivo specifico per cui usate la funzione CompareTime, invece che semplicemente T?

Voi scrivete :
if (CompareTime(09, 10, 0) > 0) and (CompareTime(10,09, 0) < 0)

Non si potrebbe scrivere if t>0910 and t<1009

Forse t o time funziona male ed e necessario usare comparetime? A me non risulta.
Ciao Damien, non essendo un esperto in programmazione, ma solo un grande appassionato di TS mi devo affidare a quello che dice il manuale. Viene consigliato di usare questa funzione se si vuole operare all'interno di uno specifico intervallo di tempo, ma pensandoci bene potrebbe essere la stessa cosa t>0910 and t<1009. L'unica differenza cosi ad occhio potrebbe essere che con Comparetime si possono inserire anche i secondi, ma magari si possono usare anche con T.
 
Ultima modifica:

solospread

Forumer storico
Ho trovato l'errore nel listato della pagina precedente e l'ho modificato. Ora è OK. Le due stringhe dove non entrava RIENTROSHORT avevano un errore di posizione sul semaforo. Invece di semaforo-1 avevo digitato semaforo1 ed era logico che non entrassero.
 

enryg70

Nuovo forumer
Se puoi rimettere il codice corretto, che io ho provato a farlo, ma penso di aver cannato qualcosa.......mi sta generando solo candele nere adesso.... :)
 

solospread

Forumer storico
Se puoi rimettere il codice corretto, che io ho provato a farlo, ma penso di aver cannato qualcosa.......mi sta generando solo candele nere adesso.... :)
Quelle non dipendono dal codice, ma da VT. Se lo riscarichi adesso è OK. Scarica il listato di Robom e usalo su frame 1 minuto. Con le modifiche che ha apportato ora funziona correttamente ed entra secondo le istruzioni.
 

enryg70

Nuovo forumer
Ho trovato l'errore nel listato della pagina precedente e l'ho modificato. Ora è OK. Le due stringhe dove non entrava RIENTROSHORT avevano un errore di posizione sul semaforo. Invece di semaforo-1 avevo digitato semaforo1 ed era logico che non entrassero.

io intendevo questo listato della pagina precedente, in quello di robom non c'è la variabile RIENTROSHORT.
cè qualcosa che mi sfugge?
 

bernese

Nuovo forumer
Ciao ragazzi sono nuovo del forum anche se vi seguo nell'ombra da diverso tempo,cerco di imparare da voi il più possibile ma per me è tutto nuovo.Complimenti a tutti e soprattutto a solospread,
Solospread puoi aiutarmi in questo piccolo problema.
Formula indicatore heikin ashi ho trovato questa traduzione per visual ma c'è un errore che non capisco;
Heikin-Ashi I

HaClose:=(O+H+L+C)/4;
HaOpen:=(PREV + (Ref(O,-1)+Ref(H,-1)+Ref(L,-1)+Ref(C,-1))/4)/2;
HaHigh:=Max(Max(H,HaOpen),HaClose);
HaLow:=Min(Min(L,HaOpen),HaClose);
HaOpen; HaHigh; HaLow; HaClose

questa è l'originale in metastock e tradotta più o meno è così:
Var: HaClose(0), HaOpen(0), HaHight(0), HaLow(0);

HaClose = (O + H + L + C)/4;
HaOpen = ( PREV + (Ref(O,1) + Ref(H,1) + Ref(L,1) + Ref(C,1))/4)/2;
HaHight = Max(Max(H, HaOpen), HaClose);
HaLow = Min(Min(l, HaOpen), HaClose);

ma la funzione prev non va bene
ciao e grazie in ogni caso
 

Users who are viewing this thread

Alto