[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 325
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Können Sie mir sagen, wie ich bei einem Anstieg der Differenz zwischen zwei EMAs (Fünf-Tage-Minimum und -Maximum) bei der maximalen EMA long verkaufen und bei der minimalen EMA short kaufen soll?
Ich verwende"Rastvor" in der Kopfzeile der globalen Variable als die Differenz zweier EMAs .
Wie schreibe ich diesen Code in die Handelskriterien?
D.h.Vol_Arr[] sollte als ein globales Array initialisiert werden, wie ich es verstehe.
Die Frage ist natürlich eine Nullfrage, ABER.
1. Warum werden die Volumina im Indikator korrekt angezeigt?
2. Beim Berechnen greife ich aufAOBuffer3[] und nicht aufVol_Arr[] zu.
Ich danke Ihnen!
Bei der Deklaration eines Arrays (nicht eines Puffers) sollten Sie dessen Größe explizit angeben.... Zumindest.
D.h.Vol_Arr[] sollte als ein globales Array initialisiert werden, wie ich es verstehe.
Die Frage ist natürlich eine Nullfrage, ABER.
1. Warum werden die Volumina im Indikator korrekt angezeigt?
2. Beim Berechnen greife ich aufAOBuffer3[] und nicht aufVol_Arr[] zu.
Ich danke Ihnen!
Für dieses Array(Vol_Arr[]) wird weder statisch noch dynamisch Speicher zugewiesen.
2. Soweit ich aus dem Code ersehen kann, wird die Differenz von MA und nicht Volumen im ArrayAOBuffer3[] berechnet
Die Bände werden inExtMapBuffer1 gezählt.
Vol_Arr[] kann als globales Array oder mit einem statischen Modifikator initialisiert werden - die Wahl liegt bei Ihnen, aber Speicher sollte auf jeden Fall zugewiesen oder mit dem Indikatorpuffer verknüpft werden, ebenso wie die beiden vorherigen Arrays - um nur einige Varianten zu nennen.
1) Beide Arrays, die Sie verwenden, sind mit Indikatorpuffern verbunden, d.h. der Speicher ist für sie reserviert (wenn auch implizit).
......
Vladislav, ich habe den Code noch einmal überprüft. Ein Teil des Codes mitVol_Arr[]war von der alten Version des Indikators übrig geblieben, ich habe ihn gelöscht.
Ich glaube, der Fehler ist immer noch in diesem Teil des Codes, aber ich verstehe nicht, wo! Ich habe diesen Teil des Codes ausführlicher auskommentiert.
Vladislav, ich habe den Code noch einmal überprüft. Ein Teil des Codes mitVol_Arr[]war von der alten Version des Indikators übrig geblieben, ich habe ihn gelöscht.
Ich denke, dass der Fehler immer noch in diesem Teil des Codes liegt, aber ich weiß nicht, wo! Ich habe diesen Teil des Codes ausführlicher kommentiert.
Hier ist sie:
#property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 SteelBlue #property indicator_width1 2 //---- basic fan indicator parameters extern bool Show_AOLine_2=true; extern int SlowEMA3=34; extern int EMA=2; extern bool Show_Volume=true; extern double coaf=1.5; extern bool Show_Vol_line=true; //---- indicator buffers double AOBuffer3[]; double ExtMapBuffer1[]; double VLUP; double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s; datetime tmhgh, tmlw; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings string name_ind = "Awesome_super_volumes"; IndicatorShortName("Awesome_super_volumes"); //---- AO_fan line 2 (basic) if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; } else {Show_AOLine_2=DRAW_NONE; } SetIndexBuffer(0,AOBuffer3); SetIndexStyle(0,Show_AOLine_2); SetIndexLabel(0,"basic line"); SetIndexBuffer(1,ExtMapBuffer1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexLabel(1,"Volume"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Awesome Oscillator | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); double prev,current; //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- AO_fan line 2 (basic) buffer for(int i=0; i<limit; i++) { //---- AO_fan basic line + Volumes AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i); if (Show_Volume==true) { double nSum = Volume[i]*Point*coaf; if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum; if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum; } } //-- Поиск High & Time if (AOBuffer3[i]>=0) //Если Awesome больше нуля { prhgh_s = High[i]; // ----- if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];} //--- Ищу самый высокий бар и определяю время этого бара // -- пока значение tmhgh = 0 } //-- Поиск Low & Time if (AOBuffer3[i]<=0) //Если Awesome меньше нуля { prlw_s = Low[i]; // ----- if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];} // --- Ищу самый низкий бар и определяю время этого бара // -- пока значение tmlw = 0 } // -- Пересчет баров от High до Low int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw); //-- Здесь считаю общее количество баров от наименьшего до наибольшего значения // -- пока значение colbr = 0 int shift=iBarShift(NULL,0,tmlw); // -- Это точка отсчета for (i=0; i<=colbr; i++) {VLUP += MathAbs(iVolume(NULL,0, shift+i));} //-- Значению VLUP суммируем все объемы начиная от самого низкого бара до самого высокого бара // -- Значение VLUP = 47 SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black); SetText2("Волна1",DoubleToStr(VLUP,0),980,10,Gray,10); SetText2("Волна2",TimeToStr(tmlw,0),980,25,Gray,10); SetText2("Волна3",TimeToStr(tmhgh,0),980,40,Gray,10); SetText2("Волна4",DoubleToStr(colbr,0),980,55,Gray,10); //---- done return(0); } //+------------------------------------------------------------------+ void SetText(string name, string Vl, datetime t1, double p1, color c) { // if (ObjectFind(name)!=-1) ObjectDelete(name); ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0); ObjectSetText(name, Vl, 10, "Times New Roman", c); ObjectSet(name, OBJPROP_TIME1 , t1); ObjectSet(name, OBJPROP_PRICE1, p1); ObjectSet(name, OBJPROP_COLOR, c); } void SetText2(string name, string text, int xdist, int ydist, color c, int size) { ObjectCreate(name,OBJ_LABEL,0,0,0,0,0); ObjectSet(name, OBJPROP_XDISTANCE, xdist); ObjectSet(name, OBJPROP_YDISTANCE, ydist); ObjectSetText(name,text,7,"Arial Black",c); }Nochmals vielen Dank!
Hier ist sie:
Auf einen Blick:
Das hervorgehobene Fragment befindet sich außerhalb der Schleife und verwendet den Schleifenzähler i - entweder stimmt etwas mit der Logik oder mit der Implementierung nicht
Warum brauchen Sie die Zahlen als CSV-Dateien?
Wird zum Testen und Debuggen von Erkennungsalgorithmen benötigt.
Schreiben Sie sie selbst, um sie zu verstehen, anstatt sie von jemand anderem zu übernehmen.
Was genau schreiben? Sie meinen, dass Sie die Formen auf dem Diagramm selbst markieren und die entsprechenden Abschnitte der Geschichte exportieren? Diese Lösung ist die erste in der Warteschlange, aber ich hoffe immer noch, dass jemand sie bereits umgesetzt hat. Schließlich ist es ja nur eine lästige Pflicht.
Reichlich bedeutet nicht besser!
Dem möchte ich widersprechen. Je größer die Testreihe ist, desto zuverlässiger ist das Ergebnis des Programms.
p.s. Die Frage ist immer noch gültig.(Siehe Frage in diesem Beitrag)
Hallo zusammen!!!
Könnten Sie mir bitte sagen, welcher Code erforderlich ist, um einen Long-Close auf dem Maximum des aktuellen MA zu machen.
Nachstehend finden Sie die aktuellen Handelskriterien, wobei die unklaren Punkte rot hervorgehoben sind.
Es ist auch nicht klar, wie man das Programm anweist, eine Position zu verlassen,
nachdem die Differenz zwischen MA1 und MA2 vergrößert wurde?
//--------------------------------------------------------------- 5 --
// Handelskriterien
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,1); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,1); // MA_2
if ( iHigh (Symbol(),Period(),0) >= MA_1_t) //
{
Opn_S=true;
}
if ( iLow (Symbol(),Periode(),0) <= MA_2_t) //
{
Opn_B=true; // Kaufkriterium öffnen
}
if(welcher Code ist erforderlich, um einen Long-Close beim heutigen iMA-Maximum zu machen?? )
{
Cls_B=true;
}
//--------------------------------------------------------------- 6 --
Nur ein kurzer Blick:
Das hervorgehobene Fragment befindet sich außerhalb der Schleife und verwendet den Zähler der i-Schleife - entweder stimmt etwas mit der Logik oder mit der Implementierung nicht
Vielen Dank, Vladislav! Es hat etwas zu funktionieren begonnen. Aber aus irgendeinem Grund nur so! :(
Eine weitere Frage: Warum werden die Textbeschriftungen nicht im Indikatorfenster angezeigt?