Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1105

 
shtr:

Wow!!! Ich danke Ihnen! Dies erfordert einige Überlegungen.

Vielleicht gibt es irgendwo ein "Selbststudium" zu den neuen Vorschriften? Die 4-stellige Seitenzahl ist ein bisschen stressig...

Wer ist jetzt einfach... Es gibt 5 weitere solcher Themen über Neulinge im Archiv ))))

Um ehrlich zu sein, reichen die Beispiele aus der Hilfe und der Codobase aus, wenn Sie bereits Programmiererfahrung haben, vorzugsweise in C++. Wenn Sie überhaupt keine Erfahrung haben, können Sie zunächst ein C++-Tutorial studieren, denn MQL ist von der Syntax her sehr ähnlich.

 
evillive:

Wer hat es jetzt leicht... Es gibt 5 weitere solcher Themen über Neulinge im Archiv ))))

Um ehrlich zu sein, reichen die Beispiele aus der Hilfe und der Codobase aus, wenn Sie bereits Programmiererfahrung haben, vorzugsweise in C++. Wenn Sie überhaupt keine Erfahrung haben, können Sie zunächst ein C++-Tutorial studieren, denn MQL ist von der Syntax her sehr ähnlich.

Keine Erfahrung = C++-Tutorial; )))

Vielen Dank für Ihre Hilfe!

 

Guten Tag, meine Damen und Herren!

Bitte helfen Sie mir, dem Indikator eine Warnung hinzuzufügen, wenn ein Pfeil erscheint, der ein Währungspaar anzeigt.

Ich habe es selbst versucht, aber wie man so schön sagt: Es ist schwer, nicht zu wissen und zu vergessen. Vielen Dank im Voraus.



#property indicator_chart_window

#Eigenschaft indicator_buffers 4

#Eigenschaft indicator_color1 Weiß

#Eigenschaft indicator_color2 Weiß

#property indicator_color3 HellGrün

#property indicator_color4 Rot


extern int CountBars = 300;

extern string FS = " ** Filterempfindlichkeit: High <-[1..3]-> Low ** ";

extern int Empfindlichkeit = 2;

double g_ibuf_92[];

double g_ibuf_96[];

double g_ibuf_100[];

double g_ibuf_104[];

int gi_unused_108 = -1;


int init() {

IndikatorPuffer(4);

SetIndexStyle(2, DRAW_ARROW);

SetIndexArrow(2, 233);

SetIndexBuffer(2, g_ibuf_92);

SetIndexStyle(3, DRAW_ARROW);

SetIndexArrow(3, 234);

SetIndexBuffer(3, g_ibuf_96);

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 3, White);

SetIndexBuffer(0, g_ibuf_100);

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 3, White);

SetIndexBuffer(1, g_ibuf_104);

SetIndexEmptyValue(0, 0);

SetIndexEmptyValue(1, 0);

SetIndexEmptyValue(2, 0);

SetIndexEmptyValue(3, 0);

SetIndexLabel(2, "Kaufsignal");

SetIndexLabel(3, "Verkaufssignal");

SetIndexLabel(0, "Hoch");

SetIndexLabel(1, "Niedrig");

SetIndexEmptyValue(0, EMPTY_VALUE);

SetIndexEmptyValue(1, EMPTY_VALUE);

SetIndexEmptyValue(2, EMPTY_VALUE);

SetIndexEmptyValue(3, EMPTY_VALUE);

string ls_0 = "Scalper Signal";

IndicatorShortName(ls_0);

if (Empfindlichkeit < 1) Empfindlichkeit = 1;

if (Empfindlichkeit > 3) Empfindlichkeit = 3;

zurück (0);

}


int deinit() {

zurück (0);

}


double sellSignal(int ai_0) {

bool li_4 = TRUE;

wenn (Empfindlichkeit > 2)

if (iHigh(Symbol(), Period(), ai_0 + 6) >= iHigh(Symbol(), Period(), ai_0 + 5)) li_4 = FALSE;

wenn (Empfindlichkeit > 1)

if (iHigh(Symbol(), Period(), ai_0 + 5) >= iHigh(Symbol(), Period(), ai_0 + 4)) li_4 = FALSE;

wenn (Empfindlichkeit > 0)

if (iHigh(Symbol(), Period(), ai_0 + 4) >= iHigh(Symbol(), Period(), ai_0 + 3)) li_4 = FALSE;

wenn (li_4) {

if (iClose(Symbol(), Period(), ai_0 + 2) < iHigh(Symbol(), Period(), ai_0 + 3))

if (iClose(Symbol(), Period(), ai_0 + 1) < iLow(Symbol(), Period(), ai_0 + 3)) return (iHigh(Symbol(), Period(), ai_0 + 3) + 10.0 * Point)

}

zurück (0);

}


double buySignal(int ai_0) {

bool li_4 = TRUE;

wenn (Empfindlichkeit > 2)

if (iLow(Symbol(), Period(), ai_0 + 6) <= iLow(Symbol(), Period(), ai_0 + 5)) li_4 = FALSE;

wenn (Empfindlichkeit > 1)

if (iLow(Symbol(), Period(), ai_0 + 5) <= iLow(Symbol(), Period(), ai_0 + 4)) li_4 = FALSE;

wenn (Empfindlichkeit > 0)

if (iLow(Symbol(), Period(), ai_0 + 4) <= iLow(Symbol(), Period(), ai_0 + 3)) li_4 = FALSE;

wenn (li_4) {

if (iClose(Symbol(), Period(), ai_0 + 2) > iLow(Symbol(), Period(), ai_0 + 3))

if (iClose(Symbol(), Period(), ai_0 + 1) > iHigh(Symbol(), Period(), ai_0 + 3)) return (iLow(Symbol(), Period(), ai_0 + 3) - 10.0 * Point)

}

zurück (0);

}


int start() {

int li_0 = IndicatorCounted();

if (li_0 < 0) return (-1);

wenn (li_0 > 0) li_0--;

int li_4 = Balken - li_0;

for (int l_count_8 = 0; l_count_8 < li_4; l_count_8++) {

g_ibuf_92[l_count_8 + 3] = buySignal(l_count_8);

g_ibuf_96[l_count_8 + 3] = sellSignal(l_count_8);

wenn (Kaufsignal(l_count_8) > 0,0 || Verkaufssignal(l_count_8) > 0,0) {

g_ibuf_100[l_count_8 + 3] = iHigh(Symbol(), Period(), l_count_8 + 3);

g_ibuf_104[l_count_8 + 3] = iLow(Symbol(), Period(), l_count_8 + 3);

}

}

zurück (0);

}

Dateien:
 

Hallo Baggerfahrer.

Das Ergebnis meiner Bestellhistorie ist ein wenig schief.

Strategie:

1 - Eröffnen Sie 2 Aufträge in verschiedenen Richtungen (Lock in fact) mit einem kurzen Stop und einem langen Gewinn.

Bewegt sich der Kurs stetig aus der Spanne heraus, wird der Stopp einer der Orders nach unten gesetzt und die andere Order mit einem Long-Gewinn versehen.

3 - Wenn der Stop einer der Orders erreicht wird, wird eine schwebende Order auf dem Niveau ihrer Eröffnung platziert, und wenn der Preis zurückkommt, wird die Order erneut eröffnet

und wir kehren in den Positionszustand zurück, bis die nächste Bewegung zum Gewinn durch den Knock-Out des kurzen Stopps erfolgt.

Zielsetzung:

Um 3 Stopp-Knockouts zu verfolgen, denn bei der 4. Bestellung wird Martin ausgelöst. Das Problem ist, dass etwas schief geht. Ich ermittle die Auftragsrentabilität anhand der OrderProfit()-Historie,

Aber ich verstehe immer noch nicht, wie OrdersHistoryTotal() funktioniert. Prüft die Funktion die Auftragsnummer oder die Auftragsmenge?

Genauso wenig verstehe ich, wie das Löschen einer Position (entweder als Verlust oder als gar nichts) interpretiert wird. Wie kann ich in einer solchen Situation 3 aufeinanderfolgende Verluste nachvollziehen, wenn die Historie neben Verlusten noch viele andere Dinge zeigt?

 
Fartarantula:

Hallo Baggerfahrer.

Das Ergebnis der Bestellhistorie ist ein wenig schief.

Strategie:

1 - Eröffnen Sie 2 Aufträge in verschiedenen Richtungen (Lock in fact) mit einem kurzen Stop und einem langen Gewinn.

Bewegt sich der Kurs stetig aus der Spanne heraus, wird der Stopp einer der Orders nach unten gesetzt und die andere Order mit einem Long-Gewinn versehen.

3 - Wenn der Stop einer der Orders erreicht wird, wird eine schwebende Order auf dem Niveau ihrer Eröffnung platziert, und wenn der Preis zurückkommt, wird die Order erneut eröffnet

und wir kehren in den Positionszustand zurück, bis die nächste Bewegung zum Gewinn durch den Knock-Out des kurzen Stopps erfolgt.

Zielsetzung:

Um 3 Stopp-Knockouts zu verfolgen, denn bei der 4. Bestellung wird Martin ausgelöst. Das Problem ist, dass etwas schief geht. Ich ermittle die Auftragsrentabilität anhand der OrderProfit()-Historie,

Aber ich verstehe immer noch nicht, wie OrdersHistoryTotal() funktioniert. Prüft die Funktion die Auftragsnummer oder die Auftragsmenge?

Genauso wenig verstehe ich, wie das Löschen einer Position (entweder als Verlust oder als gar nichts) interpretiert wird. Wie soll ich in einer solchen Situation 3 Folgeverluste nachvollziehen, wenn die Historie neben den Verlusten noch viele andere Informationen enthält?

Zunächst ist zu beachten, dass ein schwebender Auftrag kein Verlustgeschäft ist; er wurde entweder ausgelöst oder gelöscht.

Der Verlust sollte sich bei Marktaufträgen (Kauf, Verkauf) bemerkbar machen.

OrdersHistoryTotal() gibt die Anzahl der Aufträge in der verfügbaren Handelshistorie zurück (einschließlich Einzahlungen und Abhebungen vom Konto, wenn der Modus "gesamte Historie" angezeigt wird). Die Zahl 0 ist in der Regel die erste Einzahlung, d. h. der erste Auftrag; die Zahl OrdersHistoryTotal()-1 ist der letzte Auftrag in der Historie.

Das bedeutet, dass wir eine Schleife durch die Aufträge vom letzten bis zum ersten Auftrag durchlaufen müssen, wobei die ausstehenden und die verlorenen Aufträge gleichzeitig gezählt werden.

Aber warum sollten wir überhaupt schwebende Aufträge erteilen, wenn wir immer warten können, bis der Preis das Niveau des am Stop geschlossenen Auftrags erreicht, und den Auftrag sofort je nach Marktlage öffnen können? Limit-Aufträge sind in diesem Fall eine unnötige Verbindung, da sie das Konto durcheinander bringen.

 
Fartarantula: Strategie:

1 - Eröffnen Sie 2 Aufträge in verschiedenen Richtungen (tatsächliche Sperre) mit einem kurzen Stopp und einem langen Gewinn.

2 - Bewegt sich der Kurs stetig aus der Spanne heraus, wird der Stopp einer der Orders nach unten gezogen und die andere Order mit einem Long-Gewinn versehen.

Ich habe Ihre Strategie mit den Augen eines Programmierers betrachtet. Wenn der Preis steigt, erreicht er den Sell SL, also gibt es einen Buy-Auftrag mit seinem SL und irgendwo da oben TP. In diesem Fall ist es Ihnen gelungen, einen kleinen Verlust bei der geschlossenen Order zu erzielen. Betrachten wir nun die Variante mit zwei schwebenden Aufträgen. Anstatt zwei Orders zu eröffnen, sollten Sie zwei schwebende Orders genau an den Stellen platzieren, an denen Sie SL haben. Wenn der Kurs den Buy Stopl erreicht, wird ein Kaufauftrag eröffnet, und wir haben die gleiche Position, aber es gibt keinen Verlust. Und nun das Interessanteste. Wenn der Preis steigt ...

 

...Und als der Preis nach Ihrem Prinzip stieg, rückte Ihr TP weiter weg. Und Sie haben weniger Chancen auf einen Gewinn als ich, wenn Sie unsere Handlungen in diesem Moment betrachten.

Und selbst wenn ich nicht parallel mit Ihnen handle, ist Ihr TP zwischen den Pips, und meiner ist es in der Tat. Und es wird immer sein - Sie geben dem Markt einen Teil der Richtungsbewegung.

Wenn Sie das nicht wissen, dann sollten Sie bedenken, dass selbst eine unglückliche Abweichung von 2 Punkten ein positives System in ein verlustbringendes verwandelt. Nach der ersten Zahl zu urteilen, haben Sie einen Spread von etwa 20 Pips bei einem 5-stelligen Spread,

weil der Unterschied zwischen gleichzeitig erteilten Aufträgen "nach Augenmaß" 40 Pips beträgt, wie aus der Abbildung hervorgeht.

Darum geht es nicht... Sie brauchen einen Codeschnipsel, die korrekte Erkennung einer Serie von 3 ausgeschlagenen Stopps. Warum versuchen alle, das System zu korrigieren? Und die Methodik des vorgenannten Genossen

wird auch nicht funktionieren. Es kann sein, dass der Markt Sie einfach nicht öffnen lässt, oder dass Sie dort öffnen, wo Sie nicht öffnen sollten. Mann, ich verstehe euch alle und euren Wunsch, eure Erfahrungen zu teilen. Aber ich muss nur drei Stationen verfolgen.

Alles ist an seinem Platz, ich habe nur zufällig gesehen, dass ich die falsche Reihenfolge beim Verdoppeln übersehen habe. Wie sich herausstellte, gab Histototal aus, was immer es für richtig hielt, und die Schleife zur Ermittlung eines geschlossenen Auftrags durch Verlust aus der Vergangenheit verfehlte den Auftrag.

 
Fartarantula Alles ist auf der Linie, ich habe nur zufällig gesehen, dass ich beim Verdoppeln die falsche Reihenfolge verpasst habe. Wie sich herausstellte, gab Histototal aus, was immer es für richtig hielt, und die Schleife zur Ermittlung eines geschlossenen Auftrags durch den Verlust aus der Vergangenheit verfehlte den Auftrag.

Sie müssen von der Coder-Qualifikation wegkommen und die Grundlagen des Programmierens lernen. Hier sind weitere Details... Und hier.

Hier ist das Problem. Was kehrt, wie der Autor es ausdrückt, Histototal in diesem Skript auf dem gleichen Konto am Sonntag.

void OnStart()
{
  Alert("Cчет " + DoubleToStr(AccountNumber(), 0),
        "  Дата ", TimeToStr(TimeLocal(),TIME_DATE),
        "  Ордеров ", OrdersHistoryTotal());
}

Warum anders?

Wenn weniger und mehr Aufträge auf einem Konto sind, dann 0 228 228 216 98? und wenn es weniger Aufträge gibt, ist die Bearbeitung schneller!

Der Kunde schwitzt - es ist unmöglich zu arbeiten, das Terminal ist fehlerhaft, Histototal hat ausgegeben, was es wollte, die Schleife hat es übersprungen!

 

Guten Tag zusammen. Helfen Sie mir, die Pfeile im Indikator zu erhöhen, die unteren sind in Ordnung, aber die oberen sind über den Kerzenständern.

Ich habe ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20) ausprobiert; es hat nicht funktioniert. Der Ankerpunkt des Pfeils (Objekts) ist oben, wie kann ich ihn nach oben verschieben?

//display signal arrow 
      RefreshRates(); 
   
      if(   (High[i+1]  >upBuffer[i+1] ) 
         && (Close[i+1] >Open[i+1]     ) 
         && (Close[i]   <Open[i]       ) 
        )            
      {  //draw a dot on top of the bar
         string Arrow_name_jack1 = "AboveTopBand_SellBar_jack1_" + TimeToStr(Time[i],TIME_DATE|TIME_SECONDS);  //TimeCurrent()
         ObjectCreate(Arrow_name_jack1, OBJ_ARROW, 0, Time[i], High[i]+iATR(NULL,0,20,i)/5);//5*pips);  //OBJ_ARROW=22,window=0,
//???????????? так не получилось         //  ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20);
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE, 242          );  //159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR,     Yellow    );  //Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE,     STYLE_SOLID  );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH,     2            ); 
            
      }
      else
      if (   (Low[i+1]   <dnBuffer[i+1] ) 
          && (Close[i+1] <Open[i+1]     ) 
          && (Close[i]   >Open[i]       ) 
         )            
      {  //draw a dot on top of the bar
          Arrow_name_jack1 = "BelowBotBand_BuyBar_jack1_" + TimeToStr(Time[i],TIME_DATE|TIME_SECONDS);//TimeCurrent()
         ObjectCreate(Arrow_name_jack1, OBJ_ARROW, 0, Time[i], Low[i]-iATR(NULL,0,20,i)/5);//5*pips);  //OBJ_ARROW=22,window=0,
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE, 241          );//159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR,     Yellow   );//Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE,     STYLE_SOLID  );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH,     2            ); 
      }
   }//end for(i = limit; i >= 0; i--)
 
mikanit:

Guten Tag zusammen. Helfen Sie mir, die Pfeile im Indikator zu erhöhen, die unteren sind in Ordnung, aber die oberen sind über den Kerzenständern.

Ich habe ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20) ausprobiert; es hat nicht funktioniert. Der Ankerpunkt des Pfeils (Objekts) befindet sich oben, wie kann er nach oben verschoben werden?

ObjectSetInteger(0,Pfeil_name_jack1,OBJPROP_ANCHOR,ANCHOR_BOTTOM);

Ich empfehle, die Namen der oberen und unteren Pfeile in separaten Variablen zu speichern, um Verwechslungen zu vermeiden.

Und ja, das Zeichnen von Pfeilen im Indikator mit Objekten ist eine Perversion. Es gibt Indikatorpuffer:

SetIndexStyle(0,DRAW_ARROW,0,1,clrRed);

    SetIndexArrow(0,242);