Nützliche Funktionen von KimIV - Seite 119

 
M2012K:

Hallo Kollegen, ich bin immer noch dabei, die Codes zu lernen, ich verstehe die Feinheiten nicht sehr gut und bin ein bisschen in der Zwickmühle.

So wie ich es verstehe, müssen wir diese Funktion aufrufen, um die Parameter zu korrigieren, bevor wir eine Bestellung aufgeben.

Es gibt eine solche Zeile, um eine Bestellung zu eröffnen:

if(buy == true && Open[0]>UpTr && Trade) {

buy=OrderSend(Symbol(),OP_BUYSTOP,LOT(),NormalizeDouble(op,Digits),Slippage,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits), "T",Magic,0,MediumBlue);

Ist dies der Ort, an dem es angesprochen werden sollte? Und wie man es richtig macht. Oder braucht dieser Befehl keinCorrectingPrice()?

Ich danke Ihnen im Voraus.

Bevor Sie eine Handelsanfrage an den Server senden, sollten Sie bereits StopLoss- und TakeProfit-Kurse berechnet haben. Sie werden, wie ich sehe, in Variablen gespeichert, nämlich sl und tp .

Starten Sie also diese Funktion, und fügen Sie die Namen Ihrer Variablen darin ein:

CorrectingPrice(Symbol(), OP_BUY, Ask, sl, tp);

Es wird sie für Sie korrigieren, falls nötig...

Und nach dem Aufruf dieser Funktion können Sie die Funktion für die offene Position aufrufen

 

Guten Tag.

Ich verwende die Funktion PriceOpenNearPos () von KimIV. Ich habe festgestellt, dass manchmalgehtdie nächstgelegenePositionverloren und eine anderePosition wird verwendet. So Ich habe Code für einen Test, wo Sie sehen können, wie engstePosition im Protokoll verloren geht. Bitte prüfen Sie warum dies geschieht.

int    magic    = 665544;

bool flag = false;

 

int start()

  {

//----

if((PriceOpenNearPos(NULL, OP_BUY, magic) != 0

&& PriceOpenNearPos(NULL, OP_BUY, magic)- 0.1 <  Bid

&& PriceOpenNearPos(NULL, OP_BUY, magic)+ 0.1 > Bid))

flag = true;

else

flag = false;

 

Print("::::::::::::::::::::::::: flag = ",  flag );

Print("PriceOpenNearPos(NULL, OP_BUY, magic)= ", PriceOpenNearPos(NULL, OP_BUY, magic));

 

if(!flag)

OpenPosition(NULL, OP_BUY, 0.1,0,0,magic);  

//----

   return(0);

  }

Laut den Bedingungen sollten sich die Positionen nicht überschneiden , aber wenn ich den Tester ausführe, kann ich sehen, dass sich die Positionen überschneiden. (usdjpy 5m).

 
artmedia70:

Bevor Sie eine Handelsanfrage an den Server senden, sollten Sie bereits StopLoss- und TakeProfit-Kurse berechnet haben. Sie werden, wie ich sehe, in Variablen gespeichert, nämlich sl und tp .

Führen Sie also diese Funktion aus und fügen Sie die Namen Ihrer Variablen ein:

Er wird sie bei Bedarf für Sie anpassen...

Und nachdem diese Funktion aufgerufen wurde, können Sie die Funktion zur Positionseröffnung aufrufen


Danke, ich hab's. :)
 
abeiks:

Guten Tag.

Ich verwende die Funktion PriceOpenNearPos () von KimIV. Ich stelle fest, dass manchmalgehtdie nächstgelegenePositionverloren und eine anderePosition wird verwendet. So Ich habe Code für einen Test, wo Sie sehen können, wie engstePosition im Protokoll verloren geht. Bitte prüfen Sie warum dies geschieht.

Laut den Bedingungen sollten sich die Positionen nicht überschneiden , aber wenn ich den Tester ausführe, kann ich sehen, dass sich die Positionen überschneiden. (usdjpy 5m).


Geprüft... im Testgerät... Es ist alles in Ordnung. Zeigen Sie mir selbst, wie Positionen verloren gehen. Oder erklären Sie genauer, was genau Sie als Verlustpositionen bezeichnen.

Ich füge hier meinen testbereiten Expert Advisor mit allen Zusatzfunktionen an.

Dateien:
 

Siehe Anhang. Gemäß den Bedingungen sollten sich die Positionen nicht überschneiden, aber im Terminal können wir sehen, dass die Positionen 3 und 9 zum gleichen Preis geöffnet werden (auch 4, 6, 8). Außerdem sehen wir in den Logdateien, dass zu einem bestimmten Zeitpunkt die Position 98.179 verloren geht und 98.301 erscheint. Daher überschneiden sich die Positionen.

 
abeiks:

Siehe Anhang. Gemäß den Bedingungen sollten sich die Positionen nicht überschneiden, aber das Terminal zeigt an, dass die Positionen 3 und 9 zum gleichen Preis geöffnet werden (auch 4, 6, 8). Außerdem sehen wir in den Logdateien, dass zu einem bestimmten Zeitpunkt die Position 98.179 verloren geht und 98.301 erscheint. Daher überschneiden sich die Positionen.


Wir danken Ihnen für Ihren Code, die zur Verfügung gestellten Materialien und Ihre Geduld!

Ich habe die Funktion korrigiert. Hier ist die neue Version:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.07.2013                                                     |
//|  Описание : Возвращает цену открытия ближайшей к рынку позиции.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, oop=0, p;
  int    i, k=OrdersTotal(), pp=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (pp<0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              oop=OrderOpenPrice();
            }
          }
        }
      }
    }
  }
  return(oop);
}

So funktioniert es jetzt... keine Überschneidungen

 
KimIV:


Vielen Dank für Ihren Code, die bereitgestellten Materialien und Ihre Geduld!

Die Funktion wurde korrigiert. Hier ist die neue Version:

So funktioniert es jetzt... keine Überschneidungen


Danke, alles funktioniert! :)
 
KimIV:


Die Funktion wurde korrigiert. Hier ist die neue Version:

Igor, gibt es irgendwo gepostet Ihre neuen Bibliotheken, mit Ihren neuen Funktionen oder mit einigen Ihrer Funktionen geändert?

Mit anderen Worten: aktualisierte Bibliotheken mit bereits vorgenommenen Änderungen und Ergänzungen...

 
artmedia70:

Igor, gibt es irgendwo gepostet Ihre neuen Bibliotheken, mit Ihren neuen Funktionen oder mit Änderungen an einigen Ihrer Funktionen?

Mit anderen Worten: aktualisierte Bibliotheken mit bereits vorgenommenen Änderungen und Ergänzungen...


Noch keine gepostet... Ich hatte noch nicht die Zeit... Aber egal... Ich bin ständig dabei, sie zu optimieren. Und ich habe 30 oder mehr neue geschrieben. Ich poste sie hier in aller Ruhe, wenn ich Zeit und Lust dazu habe)))

SZY. ich kann alle Bibliotheken per E-Mail zu senden, wie es ist, aber wenn Sie es veröffentlichen, ist es notwendig, die Beschreibung oder zumindest die Liste und den Zweck der Funktionen zu spezifizieren vorzubereiten...

 
KimIV:


Noch keine gepostet... Ich hatte noch nicht die Zeit... Aber egal... Ich ändere darin ständig etwas. Und ich habe 30 oder mehr neue geschrieben. Ich poste sie hier in aller Ruhe, wenn ich Zeit und Lust dazu habe)))

ZS. Ich kann alle Libras so mailen, wie sie sind, aber wenn Sie sie veröffentlichen, sollten Sie eine Beschreibung vorbereiten oder zumindest die Liste und den Zweck der Funktionen angeben...

Oh... es wird interessant sein, darin herumzustöbern :) Ich werde Ihnen eine Nachricht in Ihrem Posteingang schicken.