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

 
Top2n:

Es tut mir leid, es ist eine Schande, dass wir dasselbe hundertmal wiederholen müssen.

Seit fast einem Monat starre ich nun schon wie ein Schaf auf das Tor. Ich verstehe gar nichts.

Die Aufgabe besteht darin, einen niedrigeren gleitenden Durchschnitt mit einem gleitenden Durchschnitt von 13 zu berechnen,

d.h. eine Periode von 12 auf der Grundlage von 13 zu berechnen.

Leicht zu berechnen: Y(N)=1/N*(Y(N+1)*(N+1)-X[N]), wobei Y(i) - Wert von MA(i) am Null-Balken, X[j] - Kurswert am j-ten Balken; nur ist dies rechnerischer Unsinn, während es ohnehin nicht erlaubt, in die Zukunft zu schauen.
 

Hallo! Würde einer der geschätzten Gurus gerne den Start meines ersten EA überprüfen? Ist es möglich, weiterzumachen? Vielleicht habe ich etwas übersehen? Für nähere Informationen wäre ich sehr dankbar. Ich habe irgendwo im Forum gesehen, wie man nur eine Position offen macht, aber ich habe es nicht kopiert und kann es jetzt nicht mehr finden. Hilfe, bitte.

Ich danke Ihnen!

// Testversion von Expert Advisor

//--------------------------------------------------------------------

//------Вводные данные:-----------------------------------------------------------

Eingabe double Lots = 0.1; // Lots

input int MovingPeriod =5; // МА Berechnungszeitraum

input int MovingShift =0; // MA-Verschiebung

input int InpBandsPeriod=10; // Bollinger Bands Periode

input int InpBandsShift=0; // Verschiebung der Bollinger-Bänder

input double InpBandsDeviations=2.0; // Bollinger Bands Abweichung

input int K_Period=30; // %K Periode der Stochastik

input int D_Period=10; // %D Stochastische Periode

input int Slowdawn =8; // Stochastische Verlangsamung

Eingabefarbe clMainStoch =Yellow; // Farbe der Hauptlinie der Stochastik

Eingangsfarbe clSignalStoch =Red; // Farbe der stochastischen Signallinie

// -----Deklarieren Sie globale Variablen:------------------------------------------

double MA_0, MA_1, MA_2; // MA-Wert bei 0, 1 und 2 Takten

double MB_0, MB_1, MB_2; // Wert des Bollinger-Durchschnitts bei 0, 1 und 2 Balken

double ExtUpperBuffer[]; // Wert der oberen Bollinger-Linie

double ExtLowerBuffer[]; // Wert der unteren Bollinger-Linie

double Delta_0, Delta_1; // Differenz zwischen den Werten des oberen und unteren Bollinger ...

// ...Bollinger Linien auf 0 und 1 Balken

double Yellow_0, Yellow_1, Yellow_2; // MAIN-Wert bei 0, 1 und 2 Balken

double Red_0, Red_1, Red_2; // Wert SIGNAL bei 0, 1 und 2 Balken

//-------Поехали!----------------------------------------------------------------

int start() //Spezialfunktion start

{

//Funktionsaufruf des MA-Indikators

MA_0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);

MA_1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);

MA_2=iMA(NULL,0,GleitendePeriode,GleitendeVerschiebung,MODE_SMA,PREIS_SCHLUSS,2);

//Rückmeldung an die Funktion Bollinger Bands

MB_0=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,0);

MB_1=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,1);

MB_2=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,2);

Delta_0=iBands(ExtUpperBuffer[0]-ExtLowerBuffer[0]);

Delta_1=iBands(ExtUpperBuffer[1]-ExtLowerBuffer[1]);

//Stochastischer Funktionsaufruf

Gelb_0=iStochastic(NULL,0,K_Periode,D_Periode,Slowdawn,MODE_SMA,0,MODE_MAIN,0);

Gelb_1=iStochastic(NULL,0,K_Periode,D_Periode,Slowdawn,MODE_SMA,0,MODE_MAIN,1);

Gelb_2=iStochastic(NULL,0,K_Periode,D_Periode,Slowdawn,MODE_SMA,0,MODE_MAIN,2);

Red_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,0);

Red_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,1);

Red_2=iStochastic(NULL,0,K_Periode,D_Periode,Dämmerung,MODE_SMA,0,MODE_SIGNAL,2);

//-------Ситуации по Стохастику:-----------------------------------------------------

//Der Markt ist überkauft

double MOB()=(Gelb_0>=80 && Rot_0>=80); //Lokale Variable

//Der Markt ist überverkauft.

double MOS()=(Gelb_0<=20 && Rot_0<=20); //Lokale Variable

//Der Markt ist normal.

double MN()=(20<Gelb_0<80 && 20<Rot_0<80); //Lokale Variable

//Kritische Situation

double MC1()=(20<Gelb_0<80 && Rot_0<=20); //Lokale Variable

double MC2()=(20<Gelb_0<80 && Rot_0>=80); //Lokale Variable

double MC3()=(20<Rot_0<80 && Gelb_0<=20); //Lokale Variable

double MC4()=(20<Rot_0<80 && Gelb_0>=80); //Lokale Variable

//-------Example(my)order to open position-----------------------------------------------------


if (Delta_0 > Delta_1 && MOB()==true) //Der Markt ist überkauft, aber das Delta wächst

{ if (MB_2 > MB_1 && MB_1 < MB_0) //Unterer Bollinger Break

OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point);//Kaufauftrag eröffnen

Alert("GetLastError()); //Meldung eines Fehlers

Alert("Eröffne Position BAY mit Lots("Lots"),Preis("Ask")."); //Kaufmeldung

 

Darüber hinaus können BAY-Positionen (wie auch Verkaufspositionen) unter verschiedenen Bedingungen eröffnet werden, und je nach den Bedingungen, unter denen die Position eröffnet wurde (z. B. BAY), gelten unterschiedliche Schließungsbedingungen. (z.B. BAY), gelten andere Abschlussbedingungen.

Wie kann ich das in MKL übersetzen?

 
rapid_minus:

Darüber hinaus können BAY-Positionen (wie auch Verkaufspositionen) unter verschiedenen Bedingungen eröffnet werden, und je nach den Bedingungen, unter denen die Position eröffnet wurde (z. B. BAY), gelten unterschiedliche Schließungsbedingungen. (z.B. BAY), gelten andere Abschlussbedingungen.

Wie kann ich das in MKL übersetzen?

Wir wählen den Auftrag in der Schleifeaus. Wenn es sich um einen Kauf handelt und andere Daten (Symbol, Magie, usw.) das Kriterium erfüllen, dass er zu "benutzerdefinierten Abschlussbedingungen" geschlossen werden sollte, dann schließen wir ihn, wenn "benutzerdefinierte Abschlussbedingungen" vorliegen.
 
artmedia70:
Wir wählen den Auftrag in der Schleife aus. Wenn es sich um einen Kauf handelt und alle anderen Daten (Symbol, Magier, was auch immer) das Kriterium erfüllen, dass er zu "ordnungsgemäßen Abschlussbedingungen" geschlossen werden muss, dann schließen wir ihn, wenn es "ordnungsgemäße Abschlussbedingungen" gibt.

Es ist mir ein bisschen zu vage, aber nach etwas Nachforschung werde ich es wohl verstehen. Vielen Dank, dass Sie sich nicht von den Gipfeln des Wissens abgewandt haben oder Vorträge gehalten haben, wie einige Genossen aus dem Sowjetland.

Ich habe herausgefunden, wie man schließt:

//-------Beispiel(mine) für einen Auftrag zur Eröffnung einer Position mit verbindlicher Schließung (per Ticket)-----------------------------------------------------

//Lokale Variable, die einen BAY-Auftrag öffnet (anstelle von Zeile 63)

int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point))

//-------Dann könnte der Abschluss für diesen speziellen Auftrag wie folgt aussehen:-----------------------------------------------------

if (Ticket_1()==true) //wenn Auftrag #1 geöffnet wurde, dann...

{ if (Gelb_0>Rot_0 && (Gelb_0-Rot_0)<(Gelb_1-Rot_1)) //Gelb ist höher als Rot, Kontraktion (Bedingung)

{ if (MA_2 < MA_1 && MA_1 > MA_0);} //Rot über der mittleren (Bedingung)

else (Gelb_0>Rot_0 && (Gelb_0-Rot_0)>(Gelb_1-Rot_1)) //Gelb über Rot, Erweiterung(Bedingung)

{ if (MB_2 < MB_1 && MB_1 > MB_0);} //Obere Bollinger-Bremse (Bedingung)

bool Ans=OrderClose(Ticket,Lot,Bid,0); //...Order schließen (Sperre)variabel)

Alert("Es wird versucht, den Auftrag mit Bid("Lots"),price("Ask") zu schließen. Ich warte auf Antwort...");

if (Ans==true) // Es hat funktioniert :)

{

Alert ("Closed BAY order by lot("Lots"),Closing price("Bid");

break; // Beenden der Schleife zum Schließen der Position

}


}

Bitte geben Sie eine Analyse, auch zum vorherigen Beitrag. Tut mir leid, dass ich so stur bin, aber du bist der Einzige, der antwortet... Ich danke Ihnen!

 
//-------Пример(мой) приказа на открытие позиции с привязкой закрытия (по тикету)----------------------------------------------------- 
                                                      
                                                      //Локальная переменная, открывающая ордер БАЙ(вместо строки 63)
   int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point));
   
        //-------Тогда закрытие именно для этого приказа может быть таким:-----------------------------------------------------
    
    if (Ticket_1()==true)                              //Если был открыт ордер №1, то...
     { if (Yellow_0>Red_0 && (Yellow_0-Red_0)<(Yellow_1-Red_1)) //Желтая выше красной, сужение(условие)
        { if (MA_2 < MA_1 && MA_1 > MA_0);}                      //Верхний перелом Средней (условие)
       else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //Желтая выше красной, расширение(альтерн.условие)
         { if (MB_2 < MB_1 && MB_1 > MB_0);}                      //Верхний перелом Боллинджера (условие)
       
       bool Ans=OrderClose(Ticket,Lot,Bid,0);          //...закрытие ордера (лок.переменная)                                               
   Alert("Попытка закрыть ордер БАЙ лотом("Lots"),цена("Ask"). Ожидание ответа..");
   if (Ans==true)                                     // Получилось :)
        {
         Alert ("Закрыт ордер БАЙ лотом("Lots"),цена закрытия("Bid");
         break;                                       // Выход из цикла закрытия позиции
        }

     }
Es ist so viel einfacher zu lesen. Entschuldigung.
 
rapid_minus:

Es ist mir ein bisschen zu vage, aber nach etwas Nachforschung werde ich es wohl verstehen. Vielen Dank dafür, dass Sie sich nicht von den Gipfeln des Wissens abwenden oder Vorträge halten, wie einige Genossen aus dem Sowjetland.

Ich dachte daran, sie auf diese Weise zu schließen:

...

Bitte geben Sie eine Analyse ab, und zwar auch zum vorherigen Beitrag. Tut mir leid, dass ich so hartnäckig bin, aber du bist der Einzige, der antwortet... Ich danke Ihnen!

Nun, es ist ein bisschen verschwommen, nicht wahr?

1. Sie müssen feststellen, ob die Bedingung für den Abschluss des Auftrags eingetreten ist.

2. In diesem Zyklus überprüfen Sie alle offenen Positionen und schließen sie, wenn Sie den gewünschten Kaufauftrag finden.

Dies ist ein Beispiel für einen Zyklus:

void ClosePositions(string symbol, int type, int magic) {
   for(int i=OrdersTotal()-1; i>=0; i--) {      // цикл по открытым ордерам
      if(OrderSelect(i,SELECT_BY_POS)) {        // выбираем ордер по индексу
         if(OrderMagicNumber()!=magic) continue;// если магик не искомый - ищем дальше
         if(OrderSymbol()!=symbol)     continue;// если символ не тот - ищем дальше
         if(OrderType()!=type)         continue;// если тип ордера не тот - ищем дальше
         // здесь, если ордер выбран, то он соответствует нужным критериям,
         // вызов функции закрытия выбранного ордера по тикету
         }
      }   
   }

D.h., um den Kaufauftrag für das aktuelle Symbol (auf dem Chart, auf dem der Expert Advisor läuft) und mit einer magischen Zahl von 100500 (zum Beispiel) zu schließen, sollten Sie die Funktion wie folgt aufrufen

ClosePositions(Symbol(),OP_BUY,100500);

Sie müssen die Zahl 100500 nicht schreiben, normalerweise ist die magische Zahl bereits im EA auf eine Variable gesetzt, zum Beispiel int Magic = 100500; Dann müssen Sie Magic anstelle von 100500 schreiben

Ich habe nichts in die Schleife geschrieben, in der die ausgewählte Position geschlossen werden soll, da sie die Funktion zum Schließen des Auftrags gemäß dem Ticket aufrufen soll. Dabei handelt es sich in der Regel um einen Aufruf einer vollständigen Funktion mit Rückgabecodes des Handelsservers. Sie können dort einen einfachen Befehl schreiben, um den ausgewählten Auftrag zu schließen OrderClose() zu überprüfen;

 
rapid_minus:
Auf diese Weise ist es viel einfacher zu lesen. Entschuldigung.

Es ist auch möglich, einen alten Beitrag zu bearbeiten, um keine Duplikate zu erzeugen ;)

 
evillive:
Es ist immer noch möglich, einen alten Beitrag zu bearbeiten, um Duplikate zu vermeiden ;)
Ich habe es versucht, aber das SRC nimmt es nicht mehr auf.
 
artmedia70:

Es ist ein bisschen neblig.

1) Feststellen, dass die Bedingung zum Schließen des Kaufauftrags eingetreten ist

2. In der Schleife überprüfen Sie alle offenen Positionen, und wenn Sie den gewünschten Kaufauftrag finden, schließen Sie ihn.

Dies ist ein Beispiel für einen Zyklus:

D.h., um den Kaufauftrag für das aktuelle Symbol (auf dem Chart, auf dem der Expert Advisor läuft) und mit einer magischen Zahl von 100500 (zum Beispiel) zu schließen, sollten Sie die Funktion wie folgt aufrufen

Sie müssen die Zahl 100500 nicht schreiben, normalerweise ist die magische Zahl bereits im EA auf eine Variable gesetzt, zum Beispiel int Magic = 100500; Dann müssen Sie Magic anstelle von 100500 schreiben

Ich habe nichts in die Schleife geschrieben, in der die ausgewählte Position geschlossen werden soll, da sie die Funktion zum Schließen des Auftrags gemäß dem Ticket aufrufen soll. Dabei handelt es sich in der Regel um einen Aufruf einer vollständigen Funktion mit Rückgabecodes des Handelsservers. Sie können dort einen einfachen Befehl schreiben, um den ausgewählten Auftrag zu schließen OrderClose() zu überprüfen;


Ich danke Ihnen. Aber soweit ich verstanden habe, wird die Magie automatisch zugewiesen, wenn ein Auftrag eröffnet wird. Daher kann ich nicht feststellen, unter welchen Bedingungen der Auftrag eröffnet wird und daher weiß ich auch nicht, unter welchen Bedingungen er geschlossen werden sollte.
Grund der Beschwerde: