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

 
MarkTrade:

Ich bitte um Verzeihung, erklären Sie mir, was hier der Fehler ist. Ich kann es nicht herausfinden.


for (i=0;i>5<==ошибка;i++)
 
MarkTrade:

Ich bitte um Verzeihung, erklären Sie mir, was hier der Fehler ist. Ich kann es nicht herausfinden.

Schauen wir uns die Zeichenfolge an.

for (i=0;i<5;i++)

Lassen Sie i zwischen null und fünf variieren. Nach jeder Iteration wird der Zähler um eins erhöht. Iterationen werden so lange berechnet, bis i kleiner als fünf ist. D.h. die Schleife funktioniert und durchläuft fünf Iterationen: 0, 1, 2, 3, 4 - das sind die Werte des Schleifenzählers i. Wenn i gleich fünf ist, wird die Schleife beendet

Schauen wir mal, was Sie haben:

for (i=0;i>5;i++)

Sie haben den Zähler i auf Null initialisiert, aber die Iterationen der Schleife müssen so lange stattfinden, wie i größer als fünf ist . Und sie ist zunächst nicht größer als fünf. Daher beginnt die Schleife nicht.

 
artmedia70:

Schlüsseln wir die Zeichenfolge auf

Die Zahl i kann zwischen null und fünf liegen. Nach jeder Iteration wird der Zähler um eins erhöht. Iterationen werden so lange berechnet, bis i kleiner als fünf ist. D.h. die Schleife funktioniert und durchläuft fünf Iterationen: 0, 1, 2, 3, 4 - das sind die Werte des Schleifenzählers i. Wenn i gleich fünf ist, wird die Schleife beendet

Schauen wir mal, was Sie haben:

Sie haben den i-Zähler mit Null initialisiert, aber die Iterationen der Schleife müssen so lange laufen, wie i größer als fünf ist . Und sie ist zunächst nicht größer als fünf. Daher beginnt die Schleife nicht.



Oh, ja! Danke! Ich glaube, mein Auge war ein wenig "verschwommen".
 
K-o-t:

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Meine Herren Programmierer, bitte beraten, wie man einen EA mit einem Indikator zu kombinieren?

Ich habe zum Beispiel einen einfachen Bot mo_bidir.mq4 genommen, der mit seinem eigenen Algorithmus handelt, und ich möchte, dass er mit seinem eigenen Algorithmus Geschäfte eröffnet, aber nach 3 MA-Signalen

Zum Beispiel auf Signal - Drei gleitende Durchschnitte:

FastEMA>MediumEMA>SlowEMA (Tendenz nach oben) - bot kauft

FastEMA<MediumEMA<SlowEMA (Trend abwärts) - bot verkauft

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod= 48;

Ich möchte, dass mein Expert Advisor auf dem 5-Minuten-Zeitrahmen handelt und der Indikator Signale vom Tages- oder 4-Stunden-Zeitrahmen gibt, und ich möchte die Zeitrahmen in den Einstellungen des Bots ändern können.

\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Ich entschuldige mich für die Wiederholung, aber sagen Sie mir wenigstens, in welchem Forumsthread ich mich bewerben soll, oder soll ich einen neuen Thread erstellen?

Ich weiß nicht, was ich tun soll.


Was Sie tun wollen, nennt man Filtern. Suchen Sie also nach dem Wort "Filter", schauen Sie sich ein paar EAs mit Filterung an, und sehen Sie, ob Sie das tun können, was Sie brauchen.
 
artmedia70:

Ich bin ein wenig verwirrt... :) Ein Problem:

1. Es gibt eine offene Position von 0,1 Lot

2. Sein TakeProfit-Wert beträgt 50 Pips.

3. Ich berechne den potentiellen Gewinn nach der Formel PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. Aus der Berechnung erhalte ich den potenziellen Gewinn von 5,00 $ (0,1*50*1,0).

Die Position geht in den roten Bereich und irgendwann wird ein weiterer durchschnittlicher Kauf eröffnet, aber mit 0,2 Lot

1. Ich berechne den Breakeven für diese beiden Positionen. Die Funktion wird seit langem wie gewünscht genutzt, und ich habe bisher keine Beschwerden:

2. Perfekt. Sie haben die Gewinnschwelle berechnet, aber... Wenn Sie die Spielsteine dieser beiden Positionen darauf setzen, schließen sie bei Null. Okay, denke ich. Jetzt muss ich zu dieser Ebene der BU so viele Punkte hinzufügen, wie ich brauche, um einen Gesamtgewinn zu erzielen, der den zuvor berechneten - $5 entspricht.

3. und hier habe ich eine Blockade in meinem Gehirn. Was ich tue: Ich nehme 5 $, teile durch die Gesamtmenge dieser beiden Positionen (0,1 + 0,2 = 0,3) und multipliziere mit dem TICK_VALUE

Ich habe 5/(0,3*1,0) = 16,6666 Dann multipliziere ich ihn mit Point (0,00016) und addiere ihn zum Breakeven-Preis.

4. Perfekt. Die Einsätze werden dorthin übertragen, aber mir scheint, dass der Gesamtgewinn von zwei Baisers, die auf diesem Niveau schließen, nicht gleich 5 $ ist - mir scheint, es sind weniger. Dies ist aus dem Testdiagramm ersichtlich. Sie zeigt deutlich, dass die Erhöhung des Saldos bei der Schließung einer Position viel größer ist als bei der Schließung mehrerer Positionen in Höhe des berechneten Gesamtumsatzes (Sie können diese Stellen im Diagramm an der Darstellung der Equity-Linie erkennen). Grafik:


Wo liege ich falsch?

Ich verstehe, dass Sie den Gesamtgewinn drucken können, aber... Ich möchte verstehen, wo ich in meinen Berechnungen falsch liegen könnte, nicht den Wert der Variablen. Ich habe sie bereits ausgedruckt.

( 0.3 * 16 = 4.8 ) < ( 0.3 * 16.66666 = 5 )
Ich weiß nicht, ob dies die Differenz ist, die Sie im Sinn hatten, aber aufgrund der Rundung von 16,6666 wird der Gewinn natürlich geringer sein als die 5 $, die Sie geplant hatten.
 
artmedia70:

Ich werde ein bisschen zu eingebildet... :) Das Problem:

1. Es gibt eine offene Position von 0,1 Lot

2. Sein TakeProfit-Wert beträgt 50 Pips.

3. Ich berechne den potentiellen Gewinn nach der Formel PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. Aus der Berechnung erhalte ich den potenziellen Gewinn von 5,00 $ (0,1*50*1,0).

Die Position geht in den roten Bereich und irgendwann wird ein weiterer durchschnittlicher Kauf eröffnet, aber mit 0,2 Lot

1. Ich berechne den Breakeven für diese beiden Positionen. Die Funktion wird seit langem wie gewünscht genutzt, und ich habe bisher keine Beschwerden:

2. Perfekt. Sie haben die Gewinnschwelle berechnet, aber... Wenn Sie die Spielsteine dieser beiden Positionen darauf setzen, schließen sie bei Null. Okay, denke ich. Jetzt muss ich zu dieser Ebene der BU so viele Punkte hinzufügen, wie ich brauche, um einen Gesamtgewinn zu erzielen, der den zuvor berechneten - $5 entspricht.

3. und hier habe ich eine Blockade in meinem Gehirn. Was ich tue: Ich nehme 5 $, teile durch die Gesamtmenge dieser beiden Positionen (0,1 + 0,2 = 0,3) und multipliziere mit dem TICK_VALUE

Ich habe 5/(0,3*1,0) = 16,6666 Dann multipliziere ich ihn mit Point (0,00016) und addiere ihn zum Breakeven-Preis.

4. Perfekt. Die Einsätze werden dorthin übertragen, aber mir scheint, dass der Gesamtgewinn von zwei Baisers, die auf diesem Niveau schließen, nicht gleich 5 $ ist - mir scheint es weniger. Dies ist aus dem Testdiagramm ersichtlich. Sie zeigt deutlich, dass die Erhöhung des Saldos bei der Schließung einer Position viel größer ist als bei der Schließung mehrerer Positionen in Höhe der berechneten Gesamtmitnahme (Sie erkennen diese Stellen im Diagramm an der Darstellung der Equity-Linie auf diesen Stellen). Die Karte:


Wo liege ich falsch?

Ich verstehe, dass Sie den Gesamtgewinn drucken können, aber... Ich möchte verstehen, wo ich in meinen Berechnungen falsch liegen könnte, nicht den Wert der Variablen. Ich habe sie bereits ausgedruckt.

Ich verstehe nicht, warum es so kompliziert sein muss.
Würde das die Sache nicht einfacher machen?

  double sumprofit=0;
  for (int i=0; i<OrdersTotal(); i++) 
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
          {
           if ((OrderSymbol()==Symbol()) 
              {
               if (OrderType()==OP_BUY || OrderType()==OP_SELL) 
                  {
                    sumprofit+=OrderProfit()+OrderCommission()+OrderSwap();
                  }
             }
         }
      }
  if(sumprofit > 5) AllPosClose();//5 ----> суммарный профит позиций
 

oder so

double sumprofit;
  for (int i=0; i<OrdersTotal(); i++) 
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
          {
           if ((OrderSymbol()==Symbol()) 
              {
               if (OrderType()==OP_BUY || OrderType()==OP_SELL) 
                  {
                    sumprofit+=OrderProfit()+OrderCommission()+OrderSwap();
                  }
             }
         }
      }
  if(sumprofit > 5) AllPosClose();//5 ----> суммарный профит позиций
  if(sumprofit < -5) Dolivka();//  определенным лотом Sell или Buy
 
Bitte beraten Sie mich, ich bin kein Programmierer - wo im Terminal sind die heruntergeladenen Indikatoren (wie man sie sehen und ausführen). Ich habe sie heruntergeladen und installiert, aber ich kann sie im Terminal selbst nicht finden.
 
fox6900:
Bitte beraten Sie mich, ich bin kein Programmierer - wo im Terminal sind die heruntergeladenen Indikatoren (wie man sie sehen und ausführen). Ich habe sie heruntergeladen und installiert, aber ich kann sie im Terminal selbst nicht finden.

Wie haben Sie sie installiert? Sagen Sie uns, wie... haben wir vielleicht einen Anhaltspunkt...
 
Kann AccountNumber() aus der DLL gelesen werden und wie? Geben Sie mir wenigstens einen Hinweis, wo ich graben soll. Ich meine, ohne den Funktionswert an die DLL zu übergeben, d. h. von der dynamischen Bibliothek selbst.