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.

Programmierungsfragen- Amibroker

Geschrieben

//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.

  • Antworten 52
  • Aufrufe 11,3Tsd
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Veröffentlichte Bilder

Featured Replies

Geschrieben
  • Autor

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.

Geschrieben

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.

Geschrieben

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

Geschrieben

@ 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)

Geschrieben
  • Autor

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.

Geschrieben

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

  • 3 Wochen später...
Geschrieben

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

Geschrieben
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

Geschrieben
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);

Geschrieben

stopARRAY = Null;

stopARRAYs = Null;

 

Hallo, probiere mal die beiden Werte mit 0 zu initialisieren.

Ich glaube dein IIF(stopARRAY

Bearbeitet von nichtsnutz

Geschrieben
stopARRAY = Null;

stopARRAYs = Null;

 

Hallo, probiere mal die beiden Werte mit 0 zu initialisieren.

Ich glaube dein IIF(stopARRAY <=0,....) ergibt immer false.

 

scheint zu gehen,

 

wo bei ich mich jetzt frage warum es vorher auch meist ging?

Geschrieben
scheint zu gehen,

 

wo bei ich mich jetzt frage warum es vorher auch meist ging?

 

Tja das frage ich mich auch noch. Die Werte in dem Array für die Linien sind eigentlich mist.

Siehe Anhang, hoffe das klappt.

 

ib1.png

 

ib2.png

Geschrieben
Die Werte in dem Array für die Linien sind eigentlich mist.

 

? Was meinst Du damit?

 

 

PS,

Interessanter Nick für Deine postings :door:

Geschrieben
? 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 ;)

Geschrieben

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.

Geschrieben

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

Geschrieben
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 ?

Geschrieben

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:

Geschrieben
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.

  • 1 Monat später...
Geschrieben

Hab was hilfreiches gefuden. Hier ein Script, dass beim umwandeln von Date/Time in BarIndex und umgekehrt genutzt werden kann. Der Autor gibt auch ein zwei Bsp. z.B. wenn man von einem Bar in der Vergangenheit den Close-Price benötigt.... :empathy2:

 

Date_To_Num(), Time_To_Num() - Funktion

http://www.amibroker.com/library/detail.ph...;hilite=TIMENUM

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.