P

Messaggi del profilo Ultime Attività Messaggi e Discussioni Info

  • SEGUE

    _SECTION_BEGIN( "TEXT TO GANN SWING CHART" );


    BarsOffset = Param("Shift Text Sideways", -1, -10, 0, 1);
    dist = Param("Shift Text Up or Down", 1.2, 0.1, 10, 0.1)*ATR(200);

    bi = BarIndex();
    dt = DateTime();


    textUPStartX = myGraph1 > Ref( MyGraph1, -1);
    textDNStartX = myGraph1 < Ref( MyGraph1, -1);

    UPsw = BarsSince( textUPStartX ) < BarsSince( textDNStartX ) ;


    textUpStartBI = ValueWhen( textUPStartX , bi );
    textUpEndBI = ValueWhen( textDnStartX , bi,0 );
    textDnStartBI = ValueWhen( textDnStartX , bi );
    textDnEndBI = ValueWhen( textUPStartX , bi,0 );

    upBarsCount = ValueWhen( textDnStartX OR Lastbar, ValueWhen( H == myGraph1,
    BarsSince(L == myGraph1) ),0 );
    DnBarsCount = ValueWhen( textUPStartX OR Lastbar, ValueWhen( L == myGraph1,
    BarsSince(H == myGraph1) ),0 );

    DateUp = ValueWhen( textDnStartX OR Lastbar, ValueWhen( H == myGraph1, dt
    ),0 );
    DateDn = ValueWhen( textUPStartX OR Lastbar, ValueWhen( L == myGraph1, dt ),0
    );

    TextUpPosition = bi == floor( (textUpEndBI + textUpStartBI)/2) AND Upsw;
    TextDnPosition = bi == floor( (textDnEndBI + textDnStartBI)/2) AND NOT Upsw;
    TextUpPosition = Ref(TextUpPosition , -BarsOffset);
    TextDnPosition = Ref(TextDnPosition , -BarsOffset);

    CurrentSwing = ValueWhen( textUPStartX OR textDNStartX, myGraph1);
    PreviousSwing = ValueWhen( textUPStartX OR textDNStartX, Ref( myGraph1,-1) );

    range = abs(CurrentSwing - PreviousSwing);

    CurrentSwingShifted = Ref( CurrentSwing , -BarsOffset);


    LevelUP = Ref( myGraph1, -BarsOffset) + dist;
    LevelDN = Ref( myGraph1, -BarsOffset) - (dist*0.5); // Adjusted Level down
    range = Ref( range , -BarsOffset);

    upBarsCount = Ref( upBarsCount , -BarsOffset);
    DnBarsCount = Ref( DnBarsCount , -BarsOffset);
    DateUp = Ref( DateUp , -BarsOffset);
    DateDn = Ref( DateDn , -BarsOffset);

    if ( ( PlotType2 OR Plottype3 ) AND displaytext )
    {


    for ( i = 0; i < BarCount; i++ )
    {
    if ( TextUpPosition )
    {
    textUp = NumToStr( CurrentSwingShifted [ i ], 1.2, 0 )
    + "\n"
    + DateTimeToStr( DateUp [ i ] )
    + "\n"
    + "R:" + NumToStr( range[ i ], 1.2, 0 )
    + "\n"
    + "Bars:" + NumToStr( upBarsCount [ i ], 1 )
    + "\n" ;

    PlotText( textUp , i, LevelUP[ i ], UpTextColor );
    }



    if ( TextDnPosition )
    {
    textDn = NumToStr( CurrentSwingShifted [ i ], 1.2, 0 )
    + "\n"
    + DateTimeToStr( DateDn [ i ] )
    + "\n"
    + "R: " + NumToStr( range[ i ], 1.2, 0 )
    + "\n"
    + "Bars: " + NumToStr( DnBarsCount [ i ], 1 )
    + "\n";



    PlotText( textDn , i, LevelDN[ i ], DnTextColor );
    }
    }
    }



    if ( DisplaySwing AND PlotType2 )
    {
    Plot( myGraph1, "Swing Chart", swingColor, styleStaircase, Null, Null, 0,
    0, SwingWidth );
    }

    if ( DisplaySwing AND PlotType3 )
    {
    Plot( myGraph1, "Swing Chart", swingColor, styleStaircase | styleSwingDots,
    Null, Null, 0, Zorder = 1 );

    }

    if ( displayEMA AND PlotType2 )
    {
    Plot( EMA( Close, 200 ), "",colorTurquoise, styleLine|styleNoRescale, Null,
    Null, 0, 0, EMAWidth );
    Plot( EMA( Close, 50 ), "",colorLime, styleLine|styleNoRescale, Null, Null,
    0, 0, EMAWidth );
    Plot( EMA( Close, 20 ), "",colorBlue, styleLine|styleNoRescale, Null, Null,
    0, 0, EMAWidth );
    }

    if ( displayEMA AND PlotType3 )
    {
    Plot( EMA( Close, 200 ), "",colorTurquoise, styleLine|styleNoRescale );
    Plot( EMA( Close, 50 ), "",colorLime, styleLine|styleNoRescale);
    Plot( EMA( Close, 20 ), "",colorBlue, styleLine|styleNoRescale );
    }



    //equal width swings

    bars = Param( "MODE 1 - Equal bars swing width", 5, 3, 10, 1 );
    Count = 2;
    myVal = LastValue( myGraph1 );
    myNewChart = Null;
    myNewChart[ BarCount-1 ] = myVal;
    positionUp = IIf( LastValue( BarsSince( textUpStartX ) < BarsSince(
    textDnStartX ) ), 1, -1 );//-1

    if ( PlotType1 )
    {
    j = BarCount - 1;
    for ( i = BarCount - 1; i > 0; i-- )
    {
    if ( Count == ceil( bars / 2 ) - BarsOffset )
    {


    bar = Max( 0, Min( j + BarsOffset, BarCount - 1 ) );
    bbarsCount = IIf( positionUp == 1, upBarsCount [ bar ],
    dnBarsCount [ bar ] );
    bdate = IIf( positionUp == 1, DateUp[ bar ], DateDn[ bar ] );


    dist2 = IIf( positionup == 1, dist, dist * 0.4 ); // Made up
    dist2 to raise the lower swing text





    textUp = NumToStr( CurrentSwingShifted [ bar ], 1.2, 0 )
    + "\n"
    + DateTimeToStr( bdate [ bar ] )
    + "\n"
    + "R:" + NumToStr( range[ bar ], 1.2, 0 )
    + "\n"
    + "Bars:" + NumToStr( bbarsCount , 1 )
    + "\n" ;



    PlotText( textUp , i, myVal + positionUp * dist2[ j ], IIf(
    positionUp == 1, UpTextColor, DnTextColor) );
    }


    if ( Count < bars )
    {
    myNewChart[ i ] = myVal;
    Count++;
    }
    else
    {
    while ( mygraph1[ j ] == myVal AND j > 0 )
    {
    j--;

    }

    myNewChart[ i ] = myVal;

    myVal = myGraph1[ j ];

    Count = 1;
    positionUp *= -1;
    }
    }

    Plot( myNewChart, "Swing Chart", ParamColor( "Equal Swing Color",
    colorBlack ), styleSwingDots | styleStaircase, Null, Null, 0, 0, EMAWidth );
    }
    _SECTION_END();
    SEGUE

    // Two-bar mode handling
    fupbar = IIf( twobarmode, fupbar AND Ref( fupbar, 1 ), fupbar );
    fdownbar = IIf( twobarmode, fdownbar AND Ref( fdownbar, 1 ), fdownbar );

    /* Barcount since most recent up and down swings */
    Us = BarsSince( fupbar );
    Ds = BarsSince( fdownbar ) ;

    Sd1 =IIf( Us==0, 1, IIf( Ds==0, -1, 0) );

    Sd2 = IIf( Sd1 == 1, IIf( Ref( BarsSince(Sd1==1), -1) > Ref( BarsSince( Sd1 ==
    -1), -1), 1, 0),
    IIf( Sd1 == -1, IIf( Ref( BarsSince(Sd1==1),-1) < Ref( BarsSince(
    Sd1 == -1),-1), -1, 0), 0 ) );

    g0 = ValueWhen( Sd2, Sd2 ); /* sample and hold non-zero values */

    /* shift back one bar, add one dummy swing at the end and shift forward */
    /* to ensure proper handling of the last swing */

    bi = BarIndex();
    lastbar = bi == LastValue( bi );
    swinglevel = IIf( g0 == -1, HighestSince( Sd2 == 1, H ), LowestSince( Sd2 ==
    -1, L ) );
    swinglevel = IIf( lastbar, IIf( g0 == -1, LowestSince( Sd2 == -1, L ),
    HighestSince( Sd2 == 1, H )), Ref( swinglevel, 1 ) );

    /* Gann Swing chart drawn here */
    myGraph1 = Ref( ValueWhen( Ref( Sd2 != 0, 1 ) OR lastbar, swinglevel , 0 ),
    -1 );


    graphUPStartX = myGraph1 > Ref( MyGraph1, -1);
    GraphDNStartX = myGraph1 < Ref( MyGraph1, -1);
    myGraph2up = ValueWhen( GraphDNStartX, Ref(HighestSince(graphUPStartX ,
    High),-1), 0);
    myGraph2dn = ValueWhen( graphUPStartX OR Lastbar, Ref(LowestSince(GraphDNStartX
    , Low),-1), 0);
    LastLeg = bi >= LastValue( ValueWhen(graphUPStartX OR GraphDNStartX, bi ) );
    myGraph2up = IIf( LastLeg, mygraph1, mygraph2up);
    myGraph2dn = IIf( LastLeg, mygraph1, mygraph2dn);
    myGraph1 = IIf( g0 == -1, myGraph2dn , myGraph2up );



    _SECTION_END();


    SEGUE
    Buorgiorno,
    C'è qualche geniaccio che ha voglia di tradurre questa formula per Visual Trader?
    Saluti Claudio.

    Mode 1 - A swing chart that is not overlaid on a price chart but instead has "equal width" swings.

    Mode 2 - A low Level GFX swing chart

    Mode 3 - A regular swing chart

    Text and moving averages can be applied to the swing chart via parameters.

    Formula:
    _SECTION_BEGIN("Gann Swing Charts with text");

    Version(5.60);

    GraphXSpace = 10;

    // Swing Charts
    // Main Formula designed by Tomasz Janeczko. Equal width swing and Text formula
    by Marcin Gorzynski - Amibroker Support
    // Alterations by OzTraderGuy

    _SECTION_BEGIN("Price - Bars or Candles");

    _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g,
    Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));

    PriceStyle = ParamList("Price Style", "Candlesticks|Coloured Bars");

    PriceStyle1 = PriceStyle == "Candlesticks";
    PriceStyle2 = PriceStyle == "Coloured Bars";


    _SECTION_END();


    twobarmode = ParamToggle("Two bar mode","No|Yes",0);
    PlotType = ParamList("Plot type", "MODE1 - Equal swing|MODE2 - Low level
    GFX|MODE3 - Regular");
    PlotType1 = PlotType == "MODE1 - Equal swing";
    PlotType2 = PlotType == "MODE2 - Low level GFX";
    PlotType3 = PlotType == "MODE3 - Regular";



    swingColor = ParamColor("SwingColor", colorLightBlue );
    UpTextColor = ParamColor("Swing High Text Color", colorGreen );
    DnTextColor = ParamColor("Swing Low Text Color", colorRed );

    SwingWidth = Param("Swing Thickness (px)", 2, 1, 20, 1);
    EMAWidth= Param("EMA Thickness (px)", 2, 1, 20, 1);
    DisplaySwing = ParamToggle("Display Swing ","No|Yes",1);
    displayText = ParamToggle("Display text","No|Yes",0);
    displayEMA = ParamToggle("Display EMA","No|Yes",0);


    ChartScale = ParamToggle("Chart scale", "Linear|Log",0);
    if( ChartScale == 0 )
    SetChartOptions(1,chartShowArrows|chartS howDates);
    else
    SetChartOptions(1,chartShowArrows|chartS howDates|chartLogarithmic);

    if (PriceStyle1 AND PlotType2 OR PlotType3 ) Plot( C, "Close", colorBlack ,
    styleNoTitle | styleCandle| ParamStyle("Style") );
    if( PriceStyle2 AND PlotType2 OR PlotType3 ) Plot( C, "Close", IIf(
    C>O,colorDarkGreen , colorRed), styleNoTitle | styleBar| ParamStyle("Style") );



    _SECTION_END();


    _SECTION_BEGIN("Gann Swing");


    /* Gann Swing chart v4 */
    /* Last modified 24 Feb 2001 */
    /* AFL implementation by */
    /* (C)2001 Tomasz Janeczko */
    /* one and two - bar reversal version */

    /* Change this to 1 for two-bar mode */


    outsidebar = Outside();
    insidebar = H <= Ref( H, -1 ) AND L >= Ref( L, -1 ); upbar = H > Ref( H, -1 )
    AND L >= Ref( L, -1 );
    downbar = L < Ref( L, -1 ) AND H <= Ref( H, -1 );

    upbar2 = upbar OR ( outsidebar AND Ref( downbar, 1 ) ) ;
    downbar2 = downbar OR ( outsidebar AND Ref( upbar, 1 ) );

    Poi = outsidebar AND Ref( insidebar, 1 );
    Poo = outsidebar AND Ref( outsidebar, 1 );
    Pooi = Poo AND Ref( insidebar, 2 );
    Poio = Poi AND Ref( outsidebar, 2 );
    Poii = Poi AND Ref( insidebar, 2 );
    Pooo = Poo AND Ref( outsidebar, 2 );
    Poooi = Pooo AND Ref( insidebar, 3 );
    Pooio = Pooi AND Ref( outsidebar, 3 );
    Poioo = Poio AND Ref( outsidebar, 3 );

    upbar3 = upbar2 OR ( Poi AND Ref( downbar, 2 ) );
    downbar3 = downbar2 OR ( Poi AND Ref( upbar, 2 ) );

    upbar4 = upbar3 OR ( Poo AND Ref( upbar, 2 ) );
    downbar4 = downbar3 OR ( Poo AND Ref( downbar, 2 ) );

    upbar5 = upbar4 OR ( Pooi AND Ref( upbar, 3 ) );
    downbar5 = downbar4 OR ( Pooi AND Ref( downbar, 3 ) );

    upbar6 = upbar5 OR ( Poio AND Ref( upbar, 3 ) );
    downbar6 = downbar5 OR ( Poio AND Ref( downbar, 3 ) );

    upbar7 = upbar6 OR ( Poii AND Ref( downbar, 3 ) );
    downbar7 = downbar6 OR ( Poii AND Ref( upbar, 3 ) );

    upbar8 = upbar7 OR ( Pooo AND Ref( downbar, 3 ) );
    downbar8 = downbar7 OR ( Pooo AND Ref( upbar, 3 ) );

    upbar9 = upbar8 OR ( Poooi AND Ref( downbar, 4 ) );
    downbar9 = downbar8 OR (Poooi AND Ref( upbar, 4 ) );

    upbar10 = upbar9 OR ( Pooio AND Ref( downbar, 4 ) );
    downbar10 = downbar9 OR ( Pooio AND Ref( upbar, 4 ) );

    upbar11 = upbar10 OR ( Poioo AND Ref( downbar, 4 ) );
    downbar11 = downbar10 OR ( Poioo AND Ref( upbar, 4 ) );

    fupbar = upbar11;
    fdownbar = downbar11;

    SEGUE
    c.a. Paolo Arena/staff programmatori.

    Come posso ridimensionare lo slippage che si mangia + dell' 80% dei potenziali game?
    Allo scattare del segnale TS invio in automatico tramite Wide Trader l'ordine "al meglio"
    Perdo così, almeno lo 0.13/0.20% per ogni operazione in apertura di posizione ed in chiusura.
    Oltre a cambiare il broker, mi occorrerebbe un comando, il quale mi consenta di considerare un ingresso con 2/3/4...... tick a mio favore.
    Operando con
    EnterLong(nextbar, atopen) ;
    se l'apertura della nuova barra ad es. è 100 dovrei avere la possibilità di inviare l'ordine al meglio se il prezzo rintraccia (100 - es. 4 tick), in questo modo si possono verificare:
    1) Il prezzo rintraccia ed invio l'ordine riuscendo a comprare il più vicino possibile a 100
    2) Il prezzo non rintraccia e sale subito, quindi non entro.

    Con
    if C > C[1] then
    EnterLong(nextbar,addtick(o,-4)); non è corretto perchè il TS tiene conto del valore di apertura della barra precedente, mentre voglio AtOpen come riferimento.

    Con
    if C > C[1] then
    EnterLong(nextbar,atopen,addtick(o,-4)); Errore

    E' lo stesso che scrivere
    if C[1] > C[2] then
    EnterLong(Bar,addtick(o,-4)); peccato dopo 12 anni non è più possibile.

    Esiste un listato che fa per me!! oppure sarebbe meglio ripristinare il vecchio buon... (Bar,miovalore,stop...ecc.) opportunamente ottimizzato?

    Grazie e saluti
  • Sto caricando...
  • Sto caricando...
  • Sto caricando...
Indietro