Jump to content
Tom Next - Daytrading Community

Programmierungsfragen- Amibroker


siscop

Recommended Posts

//Fractals
for (i=-2;i>-50;i--)
{
H1=Ref(H,i)>Ref(H,i+1); 	
H2=Ref(H,i)>Ref(H,i+2);
H3=Ref(H,i)>Ref(H,i-1);
H4=Ref(H,i)>Ref(H,i-2);
if (H1 && H2 && H3 && H4)
{
	LastFractalHigh=Ref(H,i);
	break;
}  
}

kommt die Fehlermeldung:

Error 6. Condition in IF, WHILE, FOR statements has to be Numeric or Boolean type. You can not use array here, please use [] (array subscript operator) to access array elements
er stört sich an meiner IF abfrage: habs mit AND oder nur mit einem "&" versucht.

Kann mir einer sagen wie ich es verändern muss damit der compiler das annimmt.

Link to comment
Share on other sites

  • Replies 52
  • Created
  • Last Reply

Top Posters In This Topic

jo danke aber ich stelle doch da einen direkten vergleich da und der hat doch als ergebnis entweder true oder false (1/0) haben.

dies sollte doch ein IF statement annehmen.

ich habe offensichtlich einen denkfehler.

ok werde schauen wie ich dies dann lösen werde. jetzt weiss ich wenigstens warum der meckert auch wenn ich noch nicht verstehe warum bei einem direkten vergleich ein array raus kommt.

Link to comment
Share on other sites

Ich kann es ja gar nicht,

und mit Schleifen habe ich ganz große Probleme.

 

Aber was mich wundert, bzw. was ich mich Frage.

 

H1=Ref(H,i)>Ref(H,i+1);

 

1) bisher habe ich das i immer in Eckigen Klammern gesehen =

2) das erste REF, wo für soll das sein?

Sollte doch = H sein

oder müsste REF (H, +- irgend was sein)

 

 

3) auch hier verstehe ich das REF nicht, oder es fehlt die Zeit für REF.

Sollte doch eigentlich so aussehen

H[i +1]

 

Du willst doch wissen ob Bar i > ist wie das folge Bar, oder nicht?

 

Für eine kurze Erklärung wäre ich dankbar,

will ja immer noch was lernen.

Link to comment
Share on other sites

HI,

 

Plot(C,"Colse",colorBlue);
//Fractals
function LastFractalHigh()
{
for (i=48;i>0;i--)
{
H1=H[i]>H[i+1];	 
H2=H[i]>H[i+2];
H3=H[i]>H[i-1];
H4=H[i]>H[i-2];

if (H1 AND H2 AND H3 AND H4)
{
   result=H[i];
	break;
}
}  
return result;
}
Plot(LastFractalHigh(),"LastFractalHigh",colorRed,styleDots);

 

meinst Du das :yep:

 

Gruß Duncan

Link to comment
Share on other sites

@ siscop

 

duncan's Lösung ist wohl das, was Du meinst.

 

Der Fehler ist, daß die Operationen innerhalb der IF-Bedingung Einzelwerte erfordern, Du sie aber mit dem vorher gewonnenen Array aus Ref beschickst.

 

Um einen Einzelwert aus einem Array zu holen sind die [] zu nutzen, Ref versetzt ein ganzes Array um den Offset. Es gilt: Ref(X, n)[m] = X[n + m]

(hoffe ich wenigstens mal, ohne es getestet zu haben)

Link to comment
Share on other sites

danke dir Duncan für deine Lösung.

mal ein paar Fragen dazu.

bei PRT, MT4 usw ist High[0] der jetzige Balken

High[1] der letzte Balken

 

dachte amibroker geht da anders vor.

dachte bei amibroker läuft es so dass

High[1] der erste/zweite Balken und der letzte (also jetzt) High[x] ist wobei x=anzahl der vorhandenen array elemente ist.

 

wenn ich also dein code nehme und habe 1000 Balken so überprüft der doch nur die ersten 48 balken ´-- beim stundenchart wären dass 952 Stunden her.

Wie gesagt ich bin noch am AFL lernen.

wenn bei AFL High[1] der letzte Balken wäre wie MT4 bzw PRT hätte ich die ganzen probleme nicht.

Link to comment
Share on other sites

HI,

 

wenn ich das Konzept richtig verstanden habe, dann berechnet AmiBroker das immer in Bezug zum aktuellen Bar, d.h. ist bei deinen aktuellen Bar i kleiner 48 kann AmiBroker auch nichts berechnen und Du bekommst keine Rückgabe, ist i aber größer 48 bekommst Du eine Rückgabe ... so verwende ich AmiBroker. Als ich zu AmiBroker gewechselt bin, konnte ich meine "gesamte" Logik über Board werfen und muss alles neu lernen. AmiBroker ist schon sehr anders als z.B. PRT, aber wenn Du erstmal die Problemchen kennst, ist AMI super offen, kannst also z.B. deine eigenen dll's schreiben :blink:

 

Gruß Duncan

Link to comment
Share on other sites

  • 3 weeks later...

Manch mal zweifele ich an dem Verstand meines PCs oder doch besser an meinem? :sad:

 

Ein einfaches Programm den Voigt Stop anzeigen zu lassen.

 

ahARRAY = Null; // aussenstab hoch
atARRAY = Null; // aussenstab tief
stopARRAY = Null;
stopARRAYs = Null;
aussenstabhoch = 0;
aussenstabtief = 0;
stop1 = L;
stop5 = H;
stopaussenstab = Ref (L,-1);
stopaussenstabshort = Ref (H,-1);
innenstab1 = Close < Ref ( High, -1 ) AND Close > Ref ( Low, -1 ) AND Open < Ref ( High, -1 ) AND Open > Ref ( Low, -1 ); // erster innenstab
aussenstab = Ref ( innenstab1, -1 );
for ( i = 1; i < BarCount; i++ )

{

if ( aussenstabhoch == 0 AND innenstab1[ i ] )

{

	aussenstabhoch = H[i-1];
	aussenstabtief = L[i-1];
	stop2 = stopaussenstab[i-1]; 
	stop6 = stopaussenstabshort[i-1];
}

if ( aussenstabhoch > 0 AND Close[ i ] < aussenstabtief OR Close [ i ] > aussenstabhoch )

{
	aussenstabhoch = 0;
	aussenstabtief = 0;
	stop2 = 0;
	stop6 = 0; 
}

if ( aussenstabhoch > 0 )

{
	ahARRAY[i-1] = aussenstabhoch;
	atARRAY[i-1] = aussenstabtief;
	ahARRAY[i] = aussenstabhoch;
	atARRAY[i] = aussenstabtief;
	stopARRAY[i] = stop2;
	stopARRAYs[i] = stop6;

}

}


//Plot ( ahARRAY, "aussenstabhoch", colorBlue, 4 );

//Plot ( atARRAY, "aussenstabtief", colorBlue, 4 );
//Plot ( stopARRAY, " stop", colorRed,4 );

//PlotOHLC( ahARRAY, ahARRAY, atARRAY, atARRAY, "", colorPink,styleCloud );	//  ColorRGB( 255, 186, 117 )


stopl = IIf (  stopARRAY <= 0, stop1,  Min (stopARRAY,atARRAY) );
stop3 = Ref (stopl,-1);

 

In 90% der Fälle auch kein Problem,

nur manch mal hört er ein paar Bar vor Ende auf? :door:

post-1129-1253165075_thumb.png

post-1129-1253165083_thumb.png

Link to comment
Share on other sites

Manch mal zweifele ich an dem Verstand meines PCs oder doch besser an meinem? :sad:

Ein einfaches Programm den Voigt Stop anzeigen zu lassen.

In 90% der Fälle auch kein Problem,

nur manch mal hört er ein paar Bar vor Ende auf? :door:

Hi,

ich würde es mir ja extra für Dich vor meinen Urlaub ansehen, aber kann es sein, das der Code unvollständig ist? :sad:

 

Wenn ich diesen Stopp:

 

//Plot ( stopARRAY, " stop", colorRed,4 );

 

aktiviere sieht es bei mir ganz anders aus …

 

snap.jpg

 

Sorry, Gruß Duncan

Link to comment
Share on other sites

Hi,

ich würde es mir ja extra für Dich vor meinen Urlaub ansehen, aber kann es sein, das der Code unvollständig ist? :sad:

 

moin,

 

sei doch nicht immer so kleinlich :door:

und wie so schon wieder Urlaub?

hattest Du nicht Grade Urlaub? :sad:

 

ahARRAY = Null; // aussenstab hoch
atARRAY = Null; // aussenstab tief
stopARRAY = Null;
stopARRAYs = Null;
aussenstabhoch = 0;
aussenstabtief = 0;
stop1 = L;
stop5 = H;
stopaussenstab = Ref (L,-1);
stopaussenstabshort = Ref (H,-1);
innenstab1 = Close < Ref ( High, -1 ) AND Close > Ref ( Low, -1 ) AND Open < Ref ( High, -1 ) AND Open > Ref ( Low, -1 ); // erster innenstab
aussenstab = Ref ( innenstab1, -1 );
for ( i = 1; i < BarCount; i++ )

{

if ( aussenstabhoch == 0 AND innenstab1[ i ] )

{

	aussenstabhoch = H[i-1];
	aussenstabtief = L[i-1];
	stop2 = stopaussenstab[i-1]; 
	stop6 = stopaussenstabshort[i-1];
}

if ( aussenstabhoch > 0 AND Close[ i ] < aussenstabtief OR Close [ i ] > aussenstabhoch )

{
	aussenstabhoch = 0;
	aussenstabtief = 0;
	stop2 = 0;
	stop6 = 0; 
}

if ( aussenstabhoch > 0 )

{
	ahARRAY[i-1] = aussenstabhoch;
	atARRAY[i-1] = aussenstabtief;
	ahARRAY[i] = aussenstabhoch;
	atARRAY[i] = aussenstabtief;
	stopARRAY[i] = stop2;
	stopARRAYs[i] = stop6;

}

}


Plot ( ahARRAY, "aussenstabhoch", colorBlue, 4 );

Plot ( atARRAY, "aussenstabtief", colorBlue, 4 );
//Plot ( stopARRAY, " stop", colorRed,4 );

//PlotOHLC( ahARRAY, ahARRAY, atARRAY, atARRAY, "", colorPink,styleCloud );	//  ColorRGB( 255, 186, 117 )


stopl = IIf (  stopARRAY <= 0, stop1,  Min (stopARRAY,atARRAY) );
stop3 = Ref (stopl,-1);

stops = IIf (  stopARRAYs <= 0, stop5,  Max (stopARRAYs,ahARRAY) );
stop4 = Ref (stops,-1);
Plot ( stop3,"stop", colorBlack,4);
Plot ( stop4,"stop", colorBlack,4);

Link to comment
Share on other sites

? Was meinst Du damit?

 

Ich meinte damit, wenn du das mit Null initialisierst, dann stehen in dem stop3 und stop4 Array meistens die Werte -1.0000. Auch in der Vergangenheit. Woher holt er sich die Werte zum Zeichnen ?

 

Ich denke das auf den Charts, wo am Ende aktuell nicht gezeichnet wird, er die Linien wieder zeichnet wenn ein aktueller Innenstab auftaucht. Daher auch die Unterschiede auf deinen beiden Bildern. In dem einen gibt es aktuell keinen Innenstab / Aussenstab, in dem anderen befinden sie sich noch innerhalb.

 

 

PS,

Interessanter Nick für Deine postings :door:

 

Ab und an kommt auch mal was gescheites raus ;)

Link to comment
Share on other sites

aussenstab = 0;
innenstab = 0;

aussenstabHoch = 0;
aussenstabTief = 0;

LongStop = Ref(L,-1);
ShortStop = Ref(H,-1);

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

// neuer Innenstab
if(C[i] <= H[i-1] AND C[i] >= L[i-1] AND NOT innenstab[i-1]) {
	aussenstab[i-1] = 1;
	aussenstabHoch[i] = H[i-1];
	aussenstabTief[i] = L[i-1];
	innenstab[i] = 1;
			
	LongStop[i] = L[i-2];
	ShortStop[i] = H[i-2];
	
	if( LongStop[i] > L[i-1] )
		LongStop[i] = L[i-1];
	if( ShortStop[i] < H[i-1] )
		ShortStop[i] = H[i-1];
}

// immer noch innenstab
if(innenstab[i-1] AND C[i] <= aussenstabHoch[i-1] AND C[i] >= aussenstabTief[i-1]) {
	aussenstabHoch[i] = aussenstabHoch[i-1];
	aussenstabTief[i] = aussenstabTief[i-1];
	innenstab[i] = 1;

	LongStop[i] = LongStop[i-1];
	ShortStop[i] = ShortStop[i-1];
} 
}

Color = IIf(aussenstab, colorRed, IIf(innenstab,colorBlue,ParamColor("BarColor", colorGrey40 )));

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

Plot(LongStop,"L",colorGreen);
Plot(ShortStop,"S",colorAqua);

 

 

So ich habe mich auch mal probiert, ist bestimmt noch nicht optimal, aber vielleicht hilft es dir weiter.

Bei Aussenstab lege ich den Stoppwert auf das H/L eins davor.

Link to comment
Share on other sites

Weiß jemand, mit welcher Funktion ich ein IntradayWert vom Vortag auslesen kann? Z.B. Close M15 Kerze vom Vortag für den DAX 15:30Uhr. Ich möchte einen Indikator basteln, der mir für den Dow Vortag 22:15 den Close-Wert ausließt und für Berechnungen im heutigen Bereich zu Verfügung stellt.

 

Gruß

 

OS

 

Hast du schon

 

TimeFrameGetPrice( pricefield, interval, shift = 0, mode = expandFirst )

in15minute für interval

 

probiert ? In welchem Interval befindest du dich ? Hast du schon etwas gecodet ? Soll die Uhrzeit Variabel sein ?

Link to comment
Share on other sites

Ne hab noch nicht gecodet. Hab nur mal geschaut, was es für Funktionen in der AFL-Referenz zum Thema gibt. OK, das mit TimeFrameGetPrice( pricefield, interval, shift = 0, mode = expandFirst ) sah ganz gut aus. Das Problem ist aber, dass ich erst mal den ShiftInterval ausrechnen muß, also den Betrag um den der Fokus in die Vergangenheit geshiftet werden muß. Find ich jetzt nicht so galant.

 

Schwer zu erklären. Mir würde es gefallen, wenn man für den Bereich TAG, mit seinen M15-Intervalen, den Wert (Bsp.) 14:00 Close auslesen kann und einer VARIABLE übergibt. Dann brächte man nur Ref(VARIABLE, -1) für den Vortagswert anwenden... Alles klar... :Howdy:

Link to comment
Share on other sites

Ne hab noch nicht gecodet. Hab nur mal geschaut, was es für Funktionen in der AFL-Referenz zum Thema gibt. OK, das mit TimeFrameGetPrice( pricefield, interval, shift = 0, mode = expandFirst ) sah ganz gut aus. Das Problem ist aber, dass ich erst mal den ShiftInterval ausrechnen muß, also den Betrag um den der Fokus in die Vergangenheit geshiftet werden muß. Find ich jetzt nicht so galant.

 

Schwer zu erklären. Mir würde es gefallen, wenn man für den Bereich TAG, mit seinen M15-Intervalen, den Wert (Bsp.) 14:00 Close auslesen kann und einer VARIABLE übergibt. Dann brächte man nur Ref(VARIABLE, -1) für den Vortagswert anwenden... Alles klar... :Howdy:

 

So wie ich das jetzt verstehe möchtest du im Tageschart das Close eines 15 Min Bars um 14 Uhr haben ?

Ich denke sowas geht wenn überhaupt nur mit TimeFrameSet und TimeFrameExpand oder TimeFrameCompress. Habe mal ein bissel rum probiert aber nicht wirklich eine Lösung gefunden. Ich kenne es sonst nur andersrum, dass man im 5 minuten Chart z.B. die Pivots vom Tages o. Stundenchart haben möchte.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...