jueves, 6 de julio de 2017

ciao Michelangelo...la stringa che aumenta le operazioni è quella che dicevo mi piace meno...rende più reattivo il ts ed aumenta la resa ma non di molto...la lascio per ora ma la devo studiare meglio..è quella che conteggia massimi e minimi itraday e funziona da filtro se l'operazione si indebolisce
qui la sorgente:

//__________________________________________Tecnica 50%________________________//

Var: newday(false), mioopen(0), miomin(0), miomax(0), mioclose(0),dvsup,dvmed,dvinf,contavaliditasegnaleup,contavaliditasegnaledown;
Var: wmax,wmin,wmed,DMAX,DMIN,rrange,mediacinquanta,vp1,vp2,vp3,vp4,vp5;
Var: fflat,lg,sh,contalg,contash,contaflat,rapportosegnalepositivoup,rapportosegnalepositivodown,contanuovimassimi,contanuoviminimi;
Var: Pr_Ingr(0), Max_Gain(0), Max_Gain_perc(0), Gain(0),input1,input2,condizioneA,condizioneB,ivp;

if IsFirstBarDay then input1=H;endif;
if IsFirstBarDay then input2=L;endif;
plotchart(input1, ivp, green, solid, 2);
plotchart(input2, ivp, red, solid, 2);

newday=GetValues(days,1,mioopen,miomin,miomax,mioclose);
dvsup= miomin+(261.8*(miomax-miomin))/100;
dvmed= miomin+(50*(miomax-miomin))/100;
dvinf= miomax-(261.8*(miomax-miomin))/100;

if isfirstbarday then
   WMAX=H;
   WMIN=L;
   else
   WMAX=iif(H>=WMAX[1],H,WMAX[1]);
   WMIN=iif(L<=WMIN[1],L,WMIN[1]);
   WMED=wmax-(wmax-wmin)*0.5;
endif;
rrange=(((highd(1)-lowd(1))/lowd(1))*100);
PlotChart(WMED,0, gray, dot, 1);
PlotChart(mediacinquanta,0, yellow, solid, 2);
DrawText(NEWOGG,0 , D,wmed , "50% intraday",wmed , red, 12, 2+2,Alright);
DrawText(NEWOGG,0 , D,dvmed , "50% ieri",dvmed , white, 14, 3+2,Alleft);

//////////////////////___CONTA_Situazione___///////////////////////////////////////////////

if positiondir=0 then fflat=1;endif; if positiondir<>0 then fflat=0;contaflat=0;endif; if fflat=1 and fflat[1]=1 then contaflat=(contaflat[1]+1);endif;

if positiondir=1 then lg=1;endif; if positiondir<>1 then lg=0;contalg=0;endif; if lg=1 and lg[1]=1 then contalg=(contalg[1]+1);endif;

if positiondir=-1 then sh=1;endif; if positiondir<>-1 then sh=0;contash=0;endif; if sh=1 and sh[1]=1 then contash=(contash[1]+1);endif;

if positiondir=1 and wmax>wmax[1] then contanuovimassimi=contanuovimassimi+1;endif;
if positiondir=1 and wmin<wmin[1] then contanuoviminimi=contanuoviminimi+1;endif;
if positiondir=-1 and wmin<wmin[1] then contanuoviminimi=contanuoviminimi+1;endif;
if positiondir=-1 and wmax>wmax[1] then contanuovimassimi=contanuovimassimi+1;endif;
if isfirstbarday and positiondir=1 then contanuovimassimi=contanuovimassimi+1;endif;
if isfirstbarday and positiondir=1 then contanuoviminimi=contanuoviminimi+1;endif;
if isfirstbarday and positiondir=-1 then contanuovimassimi=contanuovimassimi+1;endif;
if isfirstbarday and positiondir=-1 then contanuoviminimi=contanuoviminimi+1;endif;
if positiondir=0 then contanuovimassimi=0;endif;
if positiondir=0 then contanuoviminimi=0;endif;
rapportosegnalepositivoup=op(contanuovimassimi,contanuoviminimi,divis);
rapportosegnalepositivodown=op(contanuoviminimi,contanuovimassimi,divis);
mediacinquanta=(dvmed+wmed)/2;
/////////////////////////////////// ACTUAL /////////////////////////////////////////////////////
if Positionvalue<>0 then
   Pr_Ingr = positionValue;
   if Positiondir=1 then
      if (C>Max_Gain) or (Max_Gain=0) then
         Max_Gain = C;
Max_Gain_perc = ((Max_Gain-Pr_ingr)*100)/Pr_Ingr;
      endif;
      {Actual}Gain = ((C-Pr_ingr)*100)/Pr_Ingr;
   else
     if (C<Max_Gain) or (Max_Gain=0) then
Max_Gain = C;
Max_Gain_perc = ((Pr_ingr-Max_Gain)*100)/Pr_Ingr;
       endif;
       {Actual}Gain = ((Pr_ingr-C)*100)/Pr_Ingr;
   endif;
else
    Pr_ingr = 0;
Max_Gain = 0;
{Actual}Gain = 0;
endif;
/////////////////////////////////////////////////////////////////////////////
if (LastTradeClosedPerc > 3.00) and contaflat<90  and lastopclosed=1 then condizioneA=1;else condizioneA=0;endif;
if (LastTradeClosedPerc > 3.00) and contaflat<90  and lastopclosed=3 then condizioneB=1;else condizioneB=0;endif;
////////////////////////////////////////////////////////////////////////////////////////////////
installstoploss(inperc,3.00,"SL", STARTNEXTBAR);
plotchartNoZero(getstoploss, 0, red, solid, 2);
DrawText(NEWOGG,0 , D,getstoploss , "sl",getstoploss , red, 25, 1+4,Alright);
///////////////////////////////////////////////////////////////////////////////////////////////////
if  c<dvsup and c>highd(1) and GetNumOpEnterLongToday=0 and c>input1 and condizioneB=0 then enterlong( nextbar,atopen);endif;
if positiondir=1 and c<dvmed then exitlong(nextbar,atopen);endif;
if positiondir=1 and contalg>34 and rapportosegnalepositivoup<8 then exitlong(nextbar,atopen);endif; // valutare utilita


if  c>dvinf and c<lowd(1)  and GetNumOpEntershortToday=0 and c<input2 and condizioneA=0 then entershort( nextbar,atopen);endif;
if positiondir=-1 and c>dvmed then exitshort(nextbar,atopen);endif;
if positiondir=-1 and contash>34 and rapportosegnalepositivodown<8 then exitshort(nextbar,atopen);endif;  // valutare utilita


if positiondir=1 and Max_Gain_perc >4 then ModifyStopLoss(INPERC,0.50);endif;
if positiondir=-1 and Max_Gain_perc >4 then ModifyStopLoss(INPERC,0.50);endif;

plotchart(dvmed,0,blue,solid,1);

vp1 = Createviewport(250);
Plotchart(rapportosegnalepositivoup,vp1,green,solid,2);
Plotchart(rapportosegnalepositivodown,vp1,red,solid,2);

vp2 = Createviewport(150);
Plotchart(contalg,vp2,green,solid,2);
Plotchart(contash,vp2,red,solid,2);
Plotchart(contaflat,vp2,gray,solid,1);

vp3 = Createviewport(150);
Plotchart(contanuovimassimi,vp3,green,solid,2);
Plotchart(contanuoviminimi,vp3,red,solid,2);

vp4 = Createviewport(150);
Plotchart(gain,vp4,green,solid,2);
Plotchart(Max_Gain_perc,vp4,red,solid,1);

vp5 = Createviewport(150);
Plotchart(condizioneA,vp5,green,solid,2);
Plotchart(condizioneB,vp5,red,solid,2);

8 comentarios:

  1. grazissime !!!

    mi sembra di capire che comunque il contalg tiene in conto che debbano essere 34 candele (cioé devi essere dentro da 34 candele) e poi entra la condizione del rapporto nuovi massimi/nuovi minimi... in effetti la condizione scatta il giorno seguente...
    uhmmmmmm
    il report ne risente molto escludendo totalmente questa condizione ?

    ora ci penso un po' a cosa si potrebbe modificare ok ?

    cmq se ho capito bene é una fusione del ts quello di max/min della prima candela a 15 minuti e il 50%...
    cioé ora entra se alle 9:15 si genera un segnale superiore alla prima candela oppure solo se il prezzo é superiore al max del giorno prima ?
    non ho capito se entra a prescindere dal max del giorno precedente o se é una condizione aggiuntiva

    ResponderEliminar
    Respuestas
    1. togliendo il filtro 34 candele nuovi massimi minimi la resa si abbassa del 60% circa in 14 anni ..le operazioni totali passano da 1941 a 1452...le positive da 881 a 554..le negative da 1025 a 869..per il resto rimane +a mercato e diventa meno reattivo
      poi ad esempio sul long se la mattina la prima candela chiude sopra i massimi di ieri non entra subito long..aspetta che un altra candela a 15 minuti chiuda sopra la iniziale

      Eliminar
    2. beh se si abbassa del 60% in 14 anni resta ancora superiore alla versione base, facendo piú operazioni e stando meno tempo a mercato.

      non ti dico neanche di provare a cambiare il valore della condizione rapportosegnalepositivoup<8 perché mi sembra di capire che il "problema" sia la condizione stessa e non il valore che il rapporto assume... anche perché se in long fa 2 nuovi minimi (e se il titolo si ferma li fa subito) ci vogliono 16 (sedici!) nuovi massimi...
      mi sembra un po' altino effettivamente

      ma capisco il discorso di overfitting...
      sarebbe da provare su un titolo simile a fiat, se esistesse

      Eliminar
    3. ma comunque sia mi credi che stamattina prima di leggere il report ho visto la equity line e sono saltato sulla sedia ? :D

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. scusami ancora, non ho capito
    if (LastTradeClosedPerc > 3.00) and contaflat<90 and lastopclosed=1 then
    qua non ho capito lastopclosed=1 e poi =3 nello short,

    cosí come la definizione piú su di
    mediacinquanta=(dvmed+wmed)/2;

    forse apparteneva al ts in cui tenevi conto anche del 50% intraday (quello che lo rendeva piú dinamico ?)

    scusa se ti faccio le pulci ma questo ts mi ha preso benissimo

    ResponderEliminar
  4. la mediacinquanta non farci caso...era una prova aggiuntiva che per ora parcheggio..mentre invece la stringa sopra significa:
    se ultimaoperazione si è chiusa con una 5 maggiore del 3% e era un long(1) per 90 candele contami la situazione flat per considerare la condizioneA=1...1 sta per long..3 sta per short

    ResponderEliminar
  5. sopra ho sbagliato...5 sta per %..se ultimaoperazione si è chiusa con una % maggiore del 3%

    ResponderEliminar

 era dal 26 marzo che i sistemi non si posizionavano long...oggi lo han fatto...area 21.90 posizionano il 1º take profit