Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

High Performance Trading

Geschrieben

Habe hier auch ein einfaches System gefunden.

 

http://www.candletalk.de/lesersysteme-blog...ing/#post148331

 

Der Betreiber der Seite von dem System scheint zwar ein schwätzer zu sein,

aber das sollte jetzt erst mal nicht stören.

http://www.signalhandel.com/de/idee-signal.../einsteiger.php

 

Ich sehe den Vorteil in einfach aufgebauten Systemen darin das sie eigentlich Zeitlos laufen, wenn sie den laufen.

(Vielleicht liegt es auch daran das ich nicht mehr in AmiBroker programmiert bekomme :sad: )

 

Eine Frage hätte ich aber direkt am Anfang.

 

 

Sollten Sie sich bei einem Signal unsicher sein, fragen Sie sich bitte selbst, ob Sie eine starke Bewegung in der letzten Kerze erkennen können (es sollte ein aussagekräftiger Kerzenkörper vorhanden sein). Sollte dies nicht der Fall sein, lassen Sie das Signal besser aus.

 

Also wie bitte Programmiere ich einen aussagekräftigen Kerzenkörper?

Featured Replies

Geschrieben
Eine Frage hätte ich aber direkt am Anfang.

 

Also wie bitte Programmiere ich einen aussagekräftigen Kerzenkörper?

Puh, gute Frage.

 

Wenn man sich bei der Webseite, wo das System präsentiert wird, durchwühlt, kommt man ja auch auf folgende Seite: ic.arrow.right.png Candlesticks und in Folge

 

auf http://www.signalhandel.com/de/idee-signal...e-signale-2.php .

 

Das Benotungssystem finde ich ne nette Idee zur Bewertung von Marktsituationen.

 

Wahrscheinlich wird es am Ende auf ne Formel hinauslaufen, wie nen "guter Bar" (Note 2, denn 1 gibt's ja laut Aussage des Autors nicht :)) auszusehen hat. Wenn man Pech hat, muss dabei ein komplexeres Muster berücksichtigt werden (also auch Bars in der Vergangenheit).

Geschrieben
  • Autor

Programmieren will ich das abfrage Schema damit nur gute "Körper" gehandelt werden.

 

Aber dafür muss ich ja wissen wie der Körper aussehen soll.

Also was zeichnet grade diese Kerze aus das ich Sie zum Einstieg nutzen will.

Geschrieben
Programmieren will ich das abfrage Schema damit nur gute "Körper" gehandelt werden.

 

meinst Du nicht, das das etwas zu "weit" im Sinne der Programmierung geht? Ich meine, die Kerzenqualität wird doch vorrangig durch den Datenstrom bestimmt. Ergo sollte man eine gute Connection haben um schon dadurch im Vorteil zu sein.

 

Aber Indikatoren zu programmieren und dann noch mal eine Auswahl anhand der Kerzenqualität zu treffen wird vermutlich doch nur ein paar schlechte Signale nicht handeln und wiederum gute Signale auslassen weil er es nicht richtig erkannt hat.

Geschrieben
Programmieren will ich das abfrage Schema damit nur gute "Körper" gehandelt werden.

Aber dafür muss ich ja wissen wie der Körper aussehen soll.

Also was zeichnet grade diese Kerze aus das ich Sie zum Einstieg nutzen will.

 

Die Kerzenkörperlänge abs(Open-Close) sollte wahrscheinlich größer als nen Wert X sein (den Du bestimmen musst).

 

Dochtlängen kann man auch definieren, z.B. willst Du nur Kerzen wo High-Close

 

Du musst also ne Schablone vorgeben für die aktuelle Kerze. Wie diese aussieht... keine Ahnung.

 

Das steht entweder im Artikel, der wirklich seeehr lang ist und durch die kurzen Textabsätze und das ständige Klicken auch nicht gut zu lesen :sad: ist, oder aber es ist ne Aufgabe für den Systementwickler - also Dich ! :sad: Sprich: Charts gucken.

 

EDIT: hab mich bei der Kerzenkörperlänge verschrieben. Ist natürlich abs(Open-Close) wie TitanFx geschrieben hat.

Geschrieben
Programmieren will ich das abfrage Schema damit nur gute "Körper" gehandelt werden.

 

Aber dafür muss ich ja wissen wie der Körper aussehen soll.

Also was zeichnet grade diese Kerze aus das ich Sie zum Einstieg nutzen will.

 

In dem Fall wird bestimmt nur die Kerzenkörperlänge gemeint, also Absolutwert von Open-Close

diesen Wert sagen wir einfach als externe Variable "Kerzenkörper = 0.0020;" deklarieren

und als Einstiegskriterium nutzen,

oder im StrategieTester im Modus Optimierung einen Anhaltspunkt für die Grösse herausfinden

Geschrieben
  • Autor
also Absolutwert von Open-Close

 

Der Wert sagt aber nichts darüber aus wie die Kerze im Chart aussieht.

 

Nehme ich 1 € fällt die Kerze nicht auf wenn der Wert im Allgemeinen 10€ pro Bar macht,

ich nehme an man muss die Größe noch im Verhältnis zum ATR(X) oder so sehen.

 

Aber muss das ganze mal Programmieren und dann einfach die verschiedenen Sachen austesten.

Geschrieben
Der Wert sagt aber nichts darüber aus wie die Kerze im Chart aussieht.

 

Nehme ich 1 € fällt die Kerze nicht auf wenn der Wert im Allgemeinen 10€ pro Bar macht,

ich nehme an man muss die Größe noch im Verhältnis zum ATR(X) oder so sehen.

Mit "echten" Absolutwerten kann man zwar auch arbeiten, also z.B. beim Dax lässt man ein Signal nur zu, wenn der Kerzenkörper > 70 Punkte ist, das ist allerdings recht unflexibel.

Besser wäre, z.B. die Schablone bspw. prozentual zu beschreiben, also Open muss in der unteren Hälfte bzw. den unteren 50% des Bars liegen, der Close muss in zwischen 80% und 100% (also Close=High) liegen. Da kann man sich ne Weile austoben.

Zweitens kann man die Schablone auch in Bezug setzen zum restlichen Chart (ingesamt oder in einer bestimmten Periode). Der Kerzenkörper muss z.B. größer sein als die durchschnittliche HL- Spanne der letzten 2 Wochen o.ä.

Da ich den Artikel nur kurz überflogen hab, muss ich sagen, dass er mir doch zu oberflächlich zu sein scheint und da noch jede Menge Arbeit (von Dir ;) zu erledigen ist.

 

Aber muss das ganze mal Programmieren und dann einfach die verschiedenen Sachen austesten.

Genau. Ausprobieren, dann merkt man meist schnell, wo es eventuell klemmt und kann dann Schritt für Schritt Verbesserungen erarbeiten.

Geschrieben
  • Autor

Krümel meine liebste :swepimp:

und alle Anderen natürlich auch.

 

Habe mir mal vorgenommen die ganze Sache was besser beschrieben an zu gehen so das auch jemand Anderes was damit anfangen kann.

 

Wäre der Code jetzt auch für Andere verständlich?

Was sollte anderes gemacht werden?

 

Also jetzt nicht von der eigentlichen Logik des Programms sondern von der Darstellung.

 

//UmkehrstabTrading

SetFormulaName ("UmkehrstabTrading"); // name für den backtest

//SetBarsRequired( 10000, 0 );
SetOption( "AccountMargin", 100 ); // Keine Margin
//SetOption( "ActivateStopsImmediately", True );
//SetOption( "AllowPositionShrinking", False );
//SetOption( "AllowSameBarExit", True );
//SetOption( "CommissionAmount", 1.00 );
//SetOption( "CommissionMode", 2 );
//SetOption( "FuturesMode", 1 );
SetOption( "InitialEquity", 100000 ); // Startkapital
//SetOption( "InterestRate", 0 );
SetOption( "MaxOpenPositions", 1000 ); // Maximale Offenen Positionen
SetOption( "MinPosValue", 0 ); // Minimaler Betrag
SetOption( "MinShares", 1 ); // Minimale Anzahl ?
//SetOption( "PriceBoundChecking", True );
//SetOption( "ReverseSignalForcesExit", False );
//SetOption( "UsePrevBarEquityForPosSizing", False );
SetTradeDelays( 0, 0, 0, 0 );
SetPositionSize( 1, spsShares ); // Menge die gekauft wird

RoundLotSize = 0; //Positionen sollen immer aus ganzzahligen Shares bestehen(1,2,3,x)


PeriodeEMA = 12;

xBars = 1; // Tage nach denen verkauft wird


//Abfage auf dojis

Korper =  abs( O - C);
Kerze =  H - L;
Doji = Korper / Kerze  < 0.10; //Abfrage Ob Gesterne ein doji war
Plot( Korper,"Korper",colorBlack,styleBar);
Plot( Kerze,"Kerze",colorBlue,styleBar);
Plot( Doji,"Doji",colorBlue,styleBar);


// Bedingungen für Long

// EMA muss steigen und Close muss über EMA sein

EMALong = EMA(C,PeriodeEMA) > Ref(EMA(C,PeriodeEMA),-1); // Abfrage ob EMA steigt
CloseuberEMA = C > EMA(C,PeriodeEMA); // Abfrage ob Close > EMA

// Abfrage ob vorletztes Bar fallend war
// Wenn es ein Doji ist wird das Bar davor genommen. Was wenn das auch ein Doji ist?

Barfallend = IIf(Ref(Doji,-1), Ref(O,-2) > Ref(C,-2) , Ref(O,-1) > Ref(C,-1) );

// Abfrage ob heutiges Bar steigend

Kaufbar = C > O;

// Hoch über Hoch von Gestern
// und Tief kleiner Hoch da mit Limit Order geordert wird und keinen Gaps gekauft werden

Long = H > Ref(H,-1) AND L < Ref(H,-1);

//Kauf Auftrag
Long_C = Ref(EMALong,-1) AND Ref(CloseuberEMA,-1) AND Ref(Barfallend,-1) AND Ref(Kaufbar,-1) AND Long; 

Buy = Long_C;
BuyPrice = Ref(H,-1);

//Verkauf Long

Sell = BarsSince(Buy) == xBars;

// Anzeige im Chart

Buy = ExRem (Buy,Sell);
Sell = ExRem(Sell,Buy);


//dist = 1.9 * ATR( 10 );
//dist2 = 2.9 * ATR( 10 );

//for ( i = 0; i < BarCount; i++ )
//{
//if ( Buy[i] )
//PlotText( "Buy\n@" + BuyPrice[ i ], i, L[ i ] - dist[i],colorGreen,colorYellow );

//if ( Sell[i] )
//PlotText( "Sell\n@" + SellPrice[ i ], i, H[ i ] + dist[i],colorRed, colorYellow );

//if ( Cover[i] )
//PlotText( "cover\n@" + CoverPrice[ i ], i, L[ i ] - dist2[i],colorGreen,colorLightGrey );

//if ( Short[i] )
//PlotText( "Short\n@" + ShortPrice[ i ], i, H[ i ] + dist2[i],colorRed, colorLightGrey );

 

Habe jetzt für die Bestimmung von Dojis einfach die Formel genommen das wenn,

 

Körper kleiner 10% vom Bar dann Doji

post-1129-1245475204_thumb.png

Geschrieben
Habe mir mal vorgenommen die ganze Sache was besser beschrieben an zu gehen so das auch jemand Anderes was damit anfangen kann.

Gute Idee :wub:

 

Wäre der Code jetzt auch für Andere verständlich?

Wenn Du Auskommentiertes rauslöscht und somit nur noch das zu Diskutierende dasteht, wird es einfacher :wub: .

 

Was sollte anderes gemacht werden?

Also jetzt nicht von der eigentlichen Logik des Programms sondern von der Darstellung.

Versteh ich nicht so ganz :swepimp:

 

Meinst Du die Darstellung als Quellcode? Um darüber zu diskutieren, dann:

 

1. Auskommentiertes, v.a. wenn Du so große Blöcke hast rauslöschen (die Chance, dass sich jemand den Code überhaupt anschaut, steigt von 0 auf 0.3, behaupte ich mal :wub:). Ist zwar mehr Arbeit für den Programmierer, aber zu langen Code schaut sich keiner an, v.a. da Amibroker nicht grade so verbreitet hier bei uns ist.

 

2. Nur die Relevanten Sachen stehen lassen (ich hab die mal rot eingefärbt, die ich nehmen würde)

 

//UmkehrstabTrading

 

SetFormulaName ("UmkehrstabTrading"); // name für den backtest

 

//SetBarsRequired( 10000, 0 );

SetOption( "AccountMargin", 100 ); // Keine Margin

//SetOption( "ActivateStopsImmediately", True );

//SetOption( "AllowPositionShrinking", False );

//SetOption( "AllowSameBarExit", True );

//SetOption( "CommissionAmount", 1.00 );

//SetOption( "CommissionMode", 2 );

//SetOption( "FuturesMode", 1 );

SetOption( "InitialEquity", 100000 ); // Startkapital

//SetOption( "InterestRate", 0 );

SetOption( "MaxOpenPositions", 1000 ); // Maximale Offenen Positionen

SetOption( "MinPosValue", 0 ); // Minimaler Betrag

SetOption( "MinShares", 1 ); // Minimale Anzahl ?

//SetOption( "PriceBoundChecking", True );

//SetOption( "ReverseSignalForcesExit", False );

//SetOption( "UsePrevBarEquityForPosSizing", False );

SetTradeDelays( 0, 0, 0, 0 );

SetPositionSize( 1, spsShares ); // Menge die gekauft wird

 

Bis hierin ist es uninteressant.

 

RoundLotSize = 0; //Positionen sollen immer aus ganzzahligen Shares bestehen(1,2,3,x)

PeriodeEMA = 12;

xBars = 1; // Tage nach denen verkauft wird

 

//Abfage auf dojis

 

Korper = abs( O - C);

Kerze = H - L;

Doji = Korper / Kerze

Plot-Funktionen sind ebenfalls uninteressant

Plot( Korper,"Korper",colorBlack,styleBar);

Plot( Kerze,"Kerze",colorBlue,styleBar);

Plot( Doji,"Doji",colorBlue,styleBar);

 

// Bedingungen für Long

 

// EMA muss steigen und Close muss über EMA sein

 

EMALong = EMA(C,PeriodeEMA) > Ref(EMA(C,PeriodeEMA),-1); // Abfrage ob EMA steigt

CloseuberEMA = C > EMA(C,PeriodeEMA); // Abfrage ob Close > EMA

 

// Abfrage ob vorletztes Bar fallend war

// Wenn es ein Doji ist wird das Bar davor genommen. Was wenn das auch ein Doji ist?

 

Barfallend = IIf(Ref(Doji,-1), Ref(O,-2) > Ref(C,-2) , Ref(O,-1) > Ref(C,-1) );

 

// Abfrage ob heutiges Bar steigend

 

Kaufbar = C > O;

 

// Hoch über Hoch von Gestern

// und Tief kleiner Hoch da mit Limit Order geordert wird und keinen Gaps gekauft werden

 

Long = H > Ref(H,-1) AND L

 

//Kauf Auftrag

Long_C = Ref(EMALong,-1) AND Ref(CloseuberEMA,-1) AND Ref(Barfallend,-1) AND Ref(Kaufbar,-1) AND Long;

 

Buy = Long_C;

BuyPrice = Ref(H,-1);

 

//Verkauf Long

 

Sell = BarsSince(Buy) == xBars;

 

// Anzeige im Chart

 

Buy = ExRem (Buy,Sell);

Sell = ExRem(Sell,Buy);

 

 

//dist = 1.9 * ATR( 10 );

//dist2 = 2.9 * ATR( 10 );

 

//for ( i = 0; i

//{

//if ( Buy )

//PlotText( "Buy\n@" + BuyPrice[ i ], i, L[ i ] - dist,colorGreen,colorYellow );

 

//if ( Sell )

//PlotText( "Sell\n@" + SellPrice[ i ], i, H[ i ] + dist,colorRed, colorYellow );

 

//if ( Cover )

//PlotText( "cover\n@" + CoverPrice[ i ], i, L[ i ] - dist2,colorGreen,colorLightGrey );

 

//if ( Short )

//PlotText( "Short\n@" + ShortPrice[ i ], i, H[ i ] + dist2,colorRed, colorLightGrey );[/code]

Auskommentierter Quellcode ist ja schon für Dich offenbar unwichtig :wub:.

 

 

Habe jetzt für die Bestimmung von Dojis einfach die Formel genommen das wenn,

Körper kleiner 10% vom Bar dann Doji

Ok.

 

 

 

Übrig bleibt:

RoundLotSize = 0; //Positionen sollen immer aus ganzzahligen Shares bestehen(1,2,3,x)
PeriodeEMA = 12;
xBars = 1; // Tage nach denen verkauft wird

//Abfage auf dojis

Korper =  abs( O - C);
Kerze =  H - L;
Doji = Korper / Kerze  < 0.10; //Abfrage Ob Gesterne ein doji war

// Bedingungen für Long

// EMA muss steigen und Close muss über EMA sein

EMALong = EMA(C,PeriodeEMA) > Ref(EMA(C,PeriodeEMA),-1); // Abfrage ob EMA steigt
CloseuberEMA = C > EMA(C,PeriodeEMA); // Abfrage ob Close > EMA

// Abfrage ob vorletztes Bar fallend war
// Wenn es ein Doji ist wird das Bar davor genommen. Was wenn das auch ein Doji ist?

Barfallend = IIf(Ref(Doji,-1), Ref(O,-2) > Ref(C,-2) , Ref(O,-1) > Ref(C,-1) );

// Abfrage ob heutiges Bar steigend

Kaufbar = C > O;

// Hoch über Hoch von Gestern
// und Tief kleiner Hoch da mit Limit Order geordert wird und keinen Gaps gekauft werden

Long = H > Ref(H,-1) AND L < Ref(H,-1);

//Kauf Auftrag
Long_C = Ref(EMALong,-1) AND Ref(CloseuberEMA,-1) AND Ref(Barfallend,-1) AND Ref(Kaufbar,-1) AND Long; 

Buy = Long_C;
BuyPrice = Ref(H,-1);

//Verkauf Long
Sell = BarsSince(Buy) == xBars;

Buy = ExRem (Buy,Sell);
Sell = ExRem(Sell,Buy);

 

 

Was sollte anderes gemacht werden?

Also jetzt nicht von der eigentlichen Logik des Programms sondern von der Darstellung.

Wolltest Du das wissen ?

 

 

Ich persönlich mag bei längeren Programmen, wenn Blöcke gebildet werden, am besten durch //---------------------,

damit klar erkennbar ist: hier werden Parameter definiert, im nächsten Block werden Indikatorenwerte berechnet,

dann wird geprüft, ob es SIgnale gab und danach werden Orders abgesetzt.

 

//----------------------------------------------------------------------------------------------------

//1. Parameter bestimmen

 

RoundLotSize = 0; //Positionen sollen immer aus ganzzahligen Shares bestehen(1,2,3,x)

PeriodeEMA = 12;

xBars = 1; // Tage nach denen verkauft wird

 

//-----------------------------------------------------------------------------------------------------

//2. Indikatorwerte berechnen

... usw.

 

Da sieht man schneller, was wo passiert und muss sich nicht von oben nach unten lesen.

 

 

EDIT: Außerdem hilft es einem selbst beim Programmieren enorm, das eigene Gedankenchaos zu ordnen, indem man "gröbere" bzw. abstraktere Einheiten in Form von Code-Blöcken bildet.

Geschrieben
  • Autor

Muss ich an meinem Verstand zweifeln?

Muss ich am Verstand meines PCs zweifeln?

oder muss ich so was einfach als gegeben hinnehmen?

 

Der Stop soll jetzt im Moment unter das Tief der Letzten Kerze,

ziehe ich also vom Hoch einfach 1* ATR(1) ab, sollte doch hinkommen oder nicht?

 

Warum geht es manch mal und manch mal nicht?

 

Zu sehen auf dem 2 Bild wo der eingezeichnete Stop etwas tiefer ist.

 

//UmkehrstabTrading

//Grundinstellungen----------------------------------------------------------------------

SetFormulaName ("UmkehrstabTradingA2"); // name für den backtest

//SetBarsRequired( 10000, 0 );
SetOption( "AccountMargin", 100 ); // Keine Margin
//SetOption( "ActivateStopsImmediately", True );
//SetOption( "AllowPositionShrinking", False );
//SetOption( "AllowSameBarExit", True );
//SetOption( "CommissionAmount", 1.00 );
//SetOption( "CommissionMode", 2 );
//SetOption( "FuturesMode", 1 );
SetOption( "InitialEquity", 100000 ); // Startkapital
//SetOption( "InterestRate", 0 );
SetOption( "MaxOpenPositions", 1000 ); // Maximale Offenen Positionen
SetOption( "MinPosValue", 0 ); // Minimaler Betrag
SetOption( "MinShares", 1 ); // Minimale Anzahl ?
//SetOption( "PriceBoundChecking", True );
//SetOption( "ReverseSignalForcesExit", False );
//SetOption( "UsePrevBarEquityForPosSizing", False );
SetTradeDelays( 0, 0, 0, 0 );
SetPositionSize( 1, spsShares ); // Menge die gekauft wird

RoundLotSize = 0; //Positionen sollen immer aus ganzzahligen Shares bestehen(1,2,3,x)

//Fremde Programme------------------------------------------------------------------------
#include "Formulas\Systems\stochstoch9010.afl"

//VAriabelen------------------------------------------------------------------------------

stFaktor = 1;
//stFaktor = Optimize( "StoppFaktor",1, 0.5 , 2.5, 0.1 );
tpFaktor = Optimize( "TakeProfitFaktor", 2, 0.5 , 3, 0.1 );

slARRAY = Null;  //  für die Darstellung im Chart
tpARRAY = Null;  //  für die Darstellung im Chart
StopLos = 0;	 
TakeProfit = 0;

PeriodeEMA = 12;

xBars = 1; // Tage nach denen verkauft wird
ATR10 = ATR(10);



//AllgemeineAbfragen---------------------------------------------------------------------

//Abfage auf dojis

Korper =  abs( O - C);
Kerze =  H - L;
Doji = Korper / Kerze  < 0.10; //Abfrage ob ein doji, 0.10 = 10% Körper der Kerze
Plot( Doji,"Doji",colorBlue,styleBar);

// Abfrage der % veränderung = ATR10 / Close 

Veränderung = ATR10 / C * 100;
Plot( Veränderung ,"Veränderung ",colorBlue,styleBar);

//Volumen Abfrage
Volumen = MA( V * C * 100, 5 ) > 500000;



// Bedingungen für Long------------------------------------------------------------------

//Trend muss steigend sein.Abgefragt über steigende Hochs.Wenn neues Hoch > letztes Hoch = 1, wenn neues Hoch < letztes Hoch = 0

steigend = Flip (Highest_Short_Stopp > Ref(Highest_Short_Stopp,-1) , Highest_Short_Stopp < Ref(Highest_Short_Stopp,-1));

//Abstand letztes Swing-H – Entry > 1R
AbstandHoch = H + ATR(1) < Highest_Short_Stopp;

//% verändreung kleiner 5%
GrosseBar = Veränderung < 5; 

// EMA muss steigen und Close muss über EMA sein

EMALong = EMA(C,PeriodeEMA) > Ref(EMA(C,PeriodeEMA),-1); // Abfrage ob EMA steigt
CloseuberEMA = C > EMA(C,PeriodeEMA); // Abfrage ob Close > EMA
CloseGesternuberEMA =  Ref(C,-1) > Ref(EMA(C,PeriodeEMA),-1); // Abfrage ob Gestern auch Close über EMA

// Abfrage ob vorletztes Bar fallend war
// Wenn es ein Doji ist wird das Bar davor genommen. Was wenn das auch ein Doji ist?

Barfallend = IIf(Ref(Doji,-1), Ref(O,-2) > Ref(C,-2) , Ref(O,-1) > Ref(C,-1) );

// Abfrage ob heutiges Bar steigend

Kaufbar = C > O;

// Hoch über Hoch von Gestern
// und Tief kleiner Hoch da mit Limit Order geordert wird und keinen Gaps gekauft werden

Long = H > Ref(H,-1) AND L < Ref(H,-1);

//Kauf Auftrag
Long_C = Ref(steigend,-1) AND Ref(EMALong,-1) AND Ref(CloseuberEMA,-1) AND Ref(Barfallend,-1) AND Ref(Kaufbar,-1) AND Ref(CloseGesternuberEMA,-1)AND Ref(GrosseBar,-1) AND Volumen AND Ref(AbstandHoch,-1) AND Long; 

Buy = Long_C;
BuyPrice = Ref(H,-1);

//Verkauf Long-----------------------------------------------------------------------------

Sell = 0;

for( i = 1; i < BarCount; i++ )
{

//----------Aufruf nur am Anfang jedes neuen Signals, BuyPrise und ATR() wird festgelegt--------------------------------------------------------------
  if( StopLos == 0 AND Buy[ i ] ) 
  { 
	BuyPrice = Ref(H,-1);

	xxx = Ref(ATR(1),-1);								 //   xxx ist kein ARRAY
   StopLos =  BuyPrice[i] - ( xxx[i] * stFaktor );
	TakeProfit = BuyPrice[i] + ( xxx[i] * tpFaktor);
	
	
  }
  else Buy[ i ] = 0; // remove excess buy signals   >>  hat der Autor eingefügt, warum jetzt, erstmal keine Ahnung


//----------AusstoppRegel-----------------------------------------------------------------
  if( StopLos > 0 AND Low[ i ] < StopLos)			   
  {					
  Sell[ i ] = 1;
  SellPrice[ i ] = StopLos;
  StopLos = 0;
  TakeProfit =0;
  } 

//--------Zum Übergeben der ST und TP -Level für die Darstellung im Chart-----------------
if (StopLos > 0 AND Low[ i ] > StopLos AND  High[i] < TakeProfit )
{
	slARRAY[i] = StopLos;
	tpARRAY[i] = TakeProfit;
}
//----------GewinnZielRegel---------------------------------------------------------------
  if( TakeProfit > 0 AND High[i] > TakeProfit)
  {   
  Sell[ i ] = 1;
  SellPrice[ i ] = TakeProfit;
  StopLos = 0;
  TakeProfit =0;
  }

}

PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeDownArrow,colorRed,0,High);

// Plot( Close,"Price",colorBlack,styleBar);
Plot( slARRAY,"StopLevel", colorRed );
Plot( tpARRAY,"TakeProfitLevel", colorRed );


Buy = ExRem (Buy,Sell);
Sell = ExRem(Sell,Buy);

post-1129-1245852079_thumb.png

post-1129-1245852084_thumb.png

Bearbeitet von ibelieve

Geschrieben
  • Autor

Ich bin jetzt etwas weiter,

aber wirklich berauschend wird das Ergebnis nicht.

 

Ich hatte mal versucht über den Optimizer zu schauen wie ein "gutes Bar" aussehen muss,

also mal auf die Körpergröße im Verhältnis zur Bar länge getestet, brachte aber kaum Verbesserungen.

 

Versuche mit Abfragen auf die Länge des oberen oder unteren Schatten bringen eigentlich auch keinen wirklichen Vorteile.

 

Es bräuchte neue Ideen.

 

Im Code sind noch einige Fehler, bzw. das verkaufen Stimmt noch nicht ganz.

Ist mir aber noch egal da ich im Moment erst mal auf der Suche nach eine halbwegs guten Trefferquote bin.

 

 

//UmkehrstabTrading

//Grundinstellungen----------------------------------------------------------------------

SetFormulaName ("UmkehrstabTradingB3"); // name für den backtest

//SetBarsRequired( 10000, 0 );
SetOption( "AccountMargin", 100 ); // Keine Margin
//SetOption( "ActivateStopsImmediately", True );
//SetOption( "AllowPositionShrinking", False );
SetOption( "AllowSameBarExit", True );
//SetOption( "CommissionAmount", 1.00 );
//SetOption( "CommissionMode", 2 );
//SetOption( "FuturesMode", 1 );
SetOption( "InitialEquity", 10000 ); // Startkapital
//SetOption( "InterestRate", 0 );
SetOption( "MaxOpenPositions", 1000 ); // Maximale Offenen Positionen
SetOption( "MinPosValue", 0 ); // Minimaler Betrag
SetOption( "MinShares", 1 ); // Minimale Anzahl ?
//SetOption( "PriceBoundChecking", True );
//SetOption( "ReverseSignalForcesExit", False );
//SetOption( "UsePrevBarEquityForPosSizing", False );
SetTradeDelays( 0, 0, 0, 0 );
SetPositionSize( 1, spsShares ); // Menge die gekauft wird

RoundLotSize = 0; //Positionen sollen immer aus ganzzahligen Shares bestehen(1,2,3,x)


//Positionsgröße-------------------------------------------------------------------------

Risiko = -0.25; //risiko auf das depot
RisikoimWert = Ref (ATR(1),-1); // risiko im wert
PositionSize = ( Risiko / RisikoimWert) * BuyPrice;


//Fremde Programme------------------------------------------------------------------------
#include "Formulas\Systems\stochstoch9010.afl"

//VAriabelen------------------------------------------------------------------------------

Korper =  abs( O - C);//Grösse des Körpers
Kerze =  H - L;// Größe des Bars

//stFaktor = 1;
stFaktor = Optimize( "StoppFaktor",1, 0.5 , 2.5, 0.1 );
tpFaktor = 2; 
//tpFaktor = Optimize( "TakeProfitFaktor", 1.5, 0.5 , 3, 0.1 );

slARRAY = Null;  //  für die Darstellung im Chart
tpARRAY = Null;  //  für die Darstellung im Chart
StopLos = 0;	 
TakeProfit = 0;

PeriodeEMA = 12;

xBars = 15; // Tage nach denen verkauft wird
ATR10 = ATR(10);

Grossebarwert = 4; //Die Größe des Bars was die Kaufentscheidung bringt. Desto kleiner, desto leichter ist das Ziel zu erreichen
//Grossebarwert = Optimize( "Grossebarwert", 5, 1 , 7, 0.5 );




//AllgemeineAbfragen---------------------------------------------------------------------

//Richtung des Indexes

SetForeign("^GSPC");

IndexLong = C > EMA(C,PeriodeEMA); // Abfrage ob Close > EMA
IndexShort = C < EMA(C,PeriodeEMA); // Abfrage ob Close < EMA

RestorePriceArrays();


//Abfage auf dojis


Doji = Korper / Kerze  < 0.10; //Abfrage ob ein doji, 0.10 = 10% Körper der Kerze
Plot( Doji,"Doji",colorBlue,styleBar);

// Abfrage der % veränderung = ATR10 / Close 

Veränderung = ATR10 / C * 100;
Plot( Veränderung ,"Veränderung ",colorBlue,styleBar);

//Volumen Abfrage
Volumen = MA( V * C * 100, 5 ) > 500000 ;



// Bedingungen für Long------------------------------------------------------------------



// Aussehen des Kaufbars


//Kaufbarsgrosse = Optimize( "Kaufbars", 0.20, 0.10 , 0.90, 0.10 );
Kaufbarsgrosse = 0.20;

Kaufbars = Korper / Kerze  > Kaufbarsgrosse;// Die % größe des Körpers zur Kerzen länge
Schatten = H - C < Korper; // Oberer Schatten ist kleiner wie der Körper der Kerze.



//Trend muss steigend sein.Abgefragt über steigende Hochs.Wenn neues Hoch > letztes Hoch = 1, wenn neues Hoch < letztes Hoch = 0

steigend = Flip (Highest_Short_Stopp > Ref(Highest_Short_Stopp,-1) , Highest_Short_Stopp < Ref(Highest_Short_Stopp,-1));

//Abstand letztes Swing-H – Entry > 1R
AbstandHoch = H + ATR(1)*1.2 < Highest_Short_Stopp;

//% verändreung kleiner 5%
GrosseBar = ATR(1) / C * 100 < Grossebarwert; 

// EMA muss steigen und Close muss über EMA sein

EMALong = EMA(C,PeriodeEMA) > Ref(EMA(C,PeriodeEMA),-1); // Abfrage ob EMA steigt
CloseuberEMA = C > EMA(C,PeriodeEMA); // Abfrage ob Close > EMA
CloseGesternuberEMA =  Ref(C,-1) > Ref(EMA(C,PeriodeEMA),-1); // Abfrage ob Gestern auch Close über EMA

// Abfrage ob vorletztes Bar fallend war
// Wenn es ein Doji ist wird das Bar davor genommen. Was wenn das auch ein Doji ist?

Barfallend = IIf(Ref(Doji,-1), Ref(O,-2) > Ref(C,-2) , Ref(O,-1) > Ref(C,-1) );

// Abfrage ob heutiges Bar steigend

Kaufbar = C > O;

// Hoch über Hoch von Gestern
// und Tief kleiner Hoch da mit Limit Order geordert wird und keinen Gaps gekauft werden

Long = H > Ref(H,-1) AND L < Ref(H,-1);

//Kauf Auftrag
Long_C =  Ref(Schatten,-1) AND Ref(Kaufbars,-1) AND IndexLong AND Ref(steigend,-1) AND Ref(EMALong,-1) AND Ref(CloseuberEMA,-1) AND Ref(Barfallend,-1) AND Ref(Kaufbar,-1) AND Ref(CloseGesternuberEMA,-1)AND Ref(GrosseBar,-1) AND Volumen AND Ref(AbstandHoch,-1) AND Long; 

Buy = Long_C;
BuyPrice = Ref(H,-1);

//Verkauf Long-----------------------------------------------------------------------------

//Sell = BarsSince(Buy) == xBars;
Sell = 0;

for( i = 1; i < BarCount; i++ )
{

//----------Aufruf nur am Anfang jedes neuen Signals, BuyPrise und ATR() wird festgelegt--------------------------------------------------------------
  if( StopLos == 0 AND Buy[ i ] ) 
  { 
	BuyPrice = Ref(H,-1);

	xxx = Ref(ATR(1),-1);								 //   xxx ist kein ARRAY
   StopLos =  BuyPrice[i] - ( xxx[i] * stFaktor );
	TakeProfit = BuyPrice[i] + ( xxx[i] * tpFaktor);
	
	
  }
  else Buy[ i ] = 0; // remove excess buy signals   >>  hat der Autor eingefügt, warum jetzt, erstmal keine Ahnung


//----------AusstoppRegel-----------------------------------------------------------------
  if( StopLos > 0 AND Low[ i ] < StopLos)			   
  {					
  Sell[ i ] = 1;
  SellPrice[ i ] = StopLos;
  StopLos = 0;
  TakeProfit =0;
  } 

//--------Zum Übergeben der ST und TP -Level für die Darstellung im Chart-----------------
if (StopLos > 0 AND Low[ i ] > StopLos AND  High[i] < TakeProfit )
{
	slARRAY[i] = StopLos;
	tpARRAY[i] = TakeProfit;
}
//----------GewinnZielRegel---------------------------------------------------------------
  if( TakeProfit > 0 AND High[i] > TakeProfit)
  {   
  Sell[ i ] = 1;
  SellPrice[ i ] = TakeProfit;
  StopLos = 0;
  TakeProfit =0;
  }

}

PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeDownArrow,colorRed,0,High);

// Plot( Close,"Price",colorBlack,styleBar);
Plot( slARRAY,"StopLevel", colorRed );

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.