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

 
AlexeyVik:

Oh, und da ist noch etwas, was ich nicht verstehe. Wenn N eine Zeitangabe ist, dann ist D' 19:00 ' ein Textformat. Können sie verglichen werden? Nein. In Fällen von Zeitvergleichen schreibe ich

D'19:00' ist eine wörtliche Konstante vom Typ datetime.
 

Ich möchte Sie, liebe Programmierer, bitten, mir auf Russisch zu erklären, wie man mit dem Code nach vergangenen Indikatorwerten sucht. Zum Beispiel Stoploss beim Verkauf muss ich auf 3 High ZigZag von der Null-Bar, oder über die Spitze achten Fraktal setzen. wo immer ich lesen - entweder nicht, dass, oder nicht so geschrieben :)

 
Petiyashaket:

Ich möchte Sie, liebe Programmierer, bitten, mir auf Russisch zu erklären, wie man mit dem Code nach vergangenen Indikatorwerten sucht. Zum Beispiel Stoploss beim Verkauf muss ich auf 3 High ZigZag von der Null-Bar, oder über die achte obere Fraktal setzen. wo immer ich lesen - entweder nicht, dass, oder nicht so geschrieben :)

Die Schleife vom Null-Balken bis zum Anfang des Charts, int x=0. Rufen Sie in der Schleife den gewünschten Indikator auf, z.B. Fraktal. Wenn der Wert nicht leer ist, addieren Sie 1 zu x, wenn x den gewünschten Wert erreicht - speichern Sie die Iteration der Schleife und verlassen Sie die Schleife, der Wert der Iteration wird theoretisch die Nummer des Balkens sein, in dem sich das gewünschte Fraktal befindet. Theoretisch, denn während der Zyklus läuft, kann ein weiterer Balken auf M1 erscheinen, und dann wird der Zeiger auf einen falschen Balken gezeigt )))
 
evillive:
Zyklus vom Null-Balken zum Anfang des Charts, int x=0. Im Zyklus den gewünschten Indikator aufrufen, z.B. Fraktal. Wenn der Wert nicht leer ist, addieren Sie 1 zu x, wenn x den gewünschten Wert erreicht - merken Sie sich die Iteration der Schleife und verlassen Sie die Schleife. Der Iterationswert ist theoretisch die Nummer des Balkens, in dem sich das gewünschte Fraktal befindet. Theoretisch, denn wenn die Schleife läuft, kann ein neuer Balken auf M1 erscheinen und dann wird der Zeiger auf einen falschen Balken gezeigt)))
Die Zeit muss gespart werden. Oder, noch besser, verwenden Sie das Feld, in dem der Zeitpunkt der Bildung der letzten Fraktale gespeichert ist. Die Arbeitsgeschwindigkeit wird durch die Eliminierung unnötiger Schleifen verringert.
 
Petiyashaket:

Bitte erklären Sie mir auf Russisch, wie man im Code nach den vergangenen Indikatorwerten sucht? Zum Beispiel stoploss auf den Verkauf muss ich auf 3 High ZigZag von der Null-Bar, oder die obere achte Fraktal, wo immer ich lesen - oder nicht etwas, oder geschrieben nicht so :)

"Russische Sprache" und "Programmiersprache" (ich möchte eine Erklärung des Codes) sind nicht dasselbe.

Algorithmisch:

1) Legen Sie fest, welchen Wert das ZigZag von Interesse liefert, wenn es keinen "Fraktalpunkt" hat - es kann EMPTY_VALUE oder 0.0 sein.

2) Ermitteln Sie mit iCustom() in der Schleife den Wert des entsprechenden Pufferindikators auf dem in der Schleife geprüften Balken, prüfen Sie ihn auf die Differenz zum "leeren Wert" und führen Sie einen Zähler für diese Differenzen. Wenn der Zähler in Ihrem Fall gleich 3 ist, wird die Nummer (N) des Balkens der gewünschte Balken sein;

3) High[N]\Low[N] - ist der gewünschte Wert.

Für den Standard ZigZag High suchen wir so etwas wie das hier:

#define  ZZ_NULL  0.0

    uint li_N = 0, li_Bar = 1;
    double ld_ZZ = 0.;
//----
    while (li_Bar < Bars - 1)
    {
        ld_ZZ = iCustom (_Symbol, _Period, "ZigZag", /* внешние параметры индикатора */, 1, li_Bar);
        if (ld_ZZ != ZZ_NULL)
        {
            li_N++;
            if (li_N >= 3) break;
        }
        li_Bar++;
    }
    double ld_Price = High[li_Bar];

Aber vorher müssen wir die Anzahl der angezeigten Puffer im ZigZag-Code von 1 auf 3 ändern:

#property indicator_buffers 3
 

Danke für die Antworten, ich werde auf sie zurückkommen :) das Problem ist jetzt

http://clip2net.com/s/j7xvk9

Ich kann nicht herausfinden, warum der Auftrag nicht geändert wird, sondern nur neue schwebende Aufträge geöffnet werden.

 
Petiyashaket:

Danke für die Antworten, ich werde auf sie zurückkommen :) das Problem ist jetzt

http://clip2net.com/s/j7xvk9

Ich kann nicht herausfinden, warum der Auftrag nicht geändert wird, sondern nur neue schwebende Aufträge geöffnet werden.

 
evillive: Danke fürs Zeigen :)
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);           //верхний фрактал
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);         //нижний фрактал
//----
  if(Up>0&&Down==0&&Volume[0]<2) //если верхний есть а нижнего нет то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если цена позволяет выставить отложенный ордер то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {
        for (int pos=0;pos<OrdersTotal();pos++) //     скопировал эту строчку хз откуда ибо не понимаю грёбаный счетчик :) тут видимо и косяк
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES); // ищем текущие ордера
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)// и если все условия совпадают то:
          {
          OrderModify(OrderTicket(),Up+5*Point,Up-sl,Up+tp,0,CLR_NONE);//переносим байстоп на новый верхний фрактал
          }


 
Petiyashaket:
Danke fürs Zeigen :)
Worüber wird im Änderungsprotokoll geklagt? "Stupidly opens new pending orders", weil es kein Limit gibt, aber einen OrderSend.
 
Petiyashaket:

1) Jede Strategie muss durch die Anzahl der gleichzeitig offenen Aufträge definiert sein. Dementsprechend sollten wir vor der Eröffnung der nächsten Bestellung prüfen, wie viele Bestellungen bereits offen sind.

2) Auf einem Balken können nicht gleichzeitig UPPER- und LOWER-Fraktale vorhanden sein, bzw. die Prüfung wird als

    if (Up > 0 && Down == 0)

gehört in die Kategorie der Idiotie der Programmierer.

3) Bevor Sie die Bedingungen für die Rückgabe von Pufferindikatorwerten schreiben, müssen Sie genau wissen, welcher Wert für ihn "leer" ist. Haben Sie überprüft, ob sie 0 ist?

4) Das Konstrukt.

    if (Volume[0] > 2)

Das funktioniert zwar (in den meisten Fällen), ist aber unnatürlich, weil es eine "freie" Idee des Entwicklers ist, und für den Händler uninformativ. Eine Alternative - die Verfolgung eines neuen Balkens.

5) Man muss mit den Grundlagen beginnen, denn das:

    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {

Das deutet darauf hin, dass Sie überhaupt nicht verstehen, was Sie da schreiben.

Der beste Weg, dies zu verstehen, besteht darin, zu studieren, wie die Codes anderer Leute funktionieren, und sie für die eigenen Zwecke zu modifizieren. Viel Glück!