Nützliche Funktionen von KimIV - Seite 63

 
KimIV >> :

war nicht... schrieb...

Die Funktion ClosePosBySortLots().

Diese Funktion schließt die Positionen in der Reihenfolge der Sortierung nach Losgröße. Das heißt, mit dieser Funktion können Sie Positionen in auf- oder absteigender Reihenfolge der Losgrößen schließen. Die Funktion ClosePosBySortLots() akzeptiert die folgenden optionalen Parameter:

  • sy - Name des Handelsinstruments. "" - beliebiges Instrument, NULL - aktuelles Instrument. Der Standardwert ist "".
  • op - Art der Handelsoperation. Gültige Werte -1 - beliebige Position, OP_BUY - kaufen, OP_SELL - verkaufen. Der Standardwert ist -1.
  • mn - MagicNumber, eindeutiger Bezeichner des Handelsvorgangs. Standardwert -1 - eine beliebige magische Zahl.
  • sd - Sortierrichtung der Losgröße. Gültige Werte MODE_ASCEND - aufsteigend, MODE_DESCEND - absteigend. Der Standardwert ist MODE_DESCEND.

SZY: Im Anhang finden Sie ein Skript zum Testen der Funktion ClosePosBySortLots().

Vielen Dank, Igor. Ich werde für Sie beten:-)

 

Privat

rsi

Danke für die Beispiele!

Entschlüsseln Sie das, wenn es Ihnen nichts ausmacht:

var=Close[0]
Was bewirkt es?
 

äh ... Hör hier auf... Es tut mir leid... löschen... Kreativität ist immer willkommen!

und nehmen Sie den Link zu den Funktionen aus der Anhangsdatei...

Dateien:
f_kimiv.rar  12 kb
 
WroC писал(а) >>

Bitte entschlüsseln Sie dies, wenn es nicht schwierig ist:

var=Close[0]

Womit wollen Sie es essen?

Die Variable mit dem Namen var erhält den Wert des Preisniveaus des aktuellen Balkenschlusses (Nullnummer). Da aber der aktuelle Balken noch nicht beendet ist, ist Close[0] derselbe wie Bid, d.h. der aktuelle Preis.

 

KimIV


Und ich habe immer wieder versucht, marketinfo irgendwie zu benutzen, aber es stellt sich heraus, dass es noch einfacher ist ....

 
if ( ExistPositions(NULL, OP_BUY, Magic)) {
 po= PriceOpenLastPos(NULL, OP_BUY, Magic);
 if (! ExistOrders (NULL, OP_SELLSTOP, Magic+1)
 && ! ExistPositions(NULL, OP_SELL , Magic+1)) {
 pp= po- offSet*Point;
 if ( StopLoss>0) sl= pp+ StopLoss*Point; else sl=0;
 if ( TakeProfit>0) tp= pp- TakeProfit*Point; else tp=0;
 SetOrder(NULL, OP_SELLSTOP, ll, pp, sl, tp, Magic+3);

Guten Tag.
Igor, haben Sie eine Funktion zur Implementierung von Sperrmaßnahmen?
Auf Seite 45 haben Sie ein Beispiel genannt, das hierfür verwendet werden könnte.

Aber ein solcher Ansatz begrenzt die Anzahl der offenen Orders auf 1.
Wenn wir uns das Beispiel ansehen, würde es wie folgt aussehen
LockStep=20 von der offenen Position
LockStopLoss=10
1500 - open Buy\1480 - open sellstop

1470 - open buy\1450 - open sellstop

1460 - close sellstop 1450\open sellstop 1450
1490 - close sellstop 1480\opensellstop 1450
die angegebene Funktion wird zwei Orders öffnen sellstop 1450

P.S. Vielen Dank für Ihre Arbeit. Es gibt wirklich viele Informationen und sie sind sehr hilfreich, ich habe das meiste davon übernommen.



 
demsan писал(а) >>
Igor, haben Sie eine Funktion zur Implementierung von Sperrmaßnahmen?

Nein, es gibt keine separate Funktion. Sie müssen also die vorhandenen kombinieren und vielleicht einige eigene hinzufügen. Ich empfehle Ihnen, die folgende Verbindung zu organisieren: ein Paar Buy/SellStop - ein Zauberer. Nächstes Paar - nächster Magier und so weiter.

 

Die Funktion StringLower().

Diese Funktion wandelt eine Zeichenkette in Kleinbuchstaben um. Alle SIGNIFICANT (großen) Zeichen werden zu Kleinbuchstaben (klein). Die Funktion StringLower() akzeptiert nur einen obligatorischen Parameter - die Eingabezeichenfolge.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в нижнем регистре                            |
//+----------------------------------------------------------------------------+
string StringLower(string s) {
  int c, i, k=StringLen( s), n;
  for ( i=0; i< k; i++) {
    n=0;
    c=StringGetChar( s, i);
    if ( c>64 && c<91) n= c+32;     // A-Z -> a-z
    if ( c>191 && c<224) n= c+32;   // А-Я -> а-я
    if ( c==168) n=184;            //  Ё  ->  ё
    if ( n>0) s=StringSetChar( s, i, n);
  }
  return( s);
}

SZY: Im Anhang finden Sie ein Skript zum Testen der Funktion StringLower().

Dateien:
 

Die Funktion StringUpper().

Diese Funktion wandelt die Zeichenkette in Großbuchstaben um. Alle klein geschriebenen Zeichen werden zu Großbuchstaben. Die Funktion StringUpper() akzeptiert nur einen obligatorischen Parameter - die Eingabezeichenfolge.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в ВЕРХНЕМ регистре                           |
//+----------------------------------------------------------------------------+
string StringUpper(string s) {
  int c, i, k=StringLen( s), n;
  for ( i=0; i< k; i++) {
    n=0;
    c=StringGetChar( s, i);
    if ( c>96 && c<123) n= c-32;    // a-z -> A-Z
    if ( c>223 && c<256) n= c-32;   // а-я -> А-Я
    if ( c==184) n=168;            //  ё  ->  Ё
    if ( n>0) s=StringSetChar( s, i, n);
  }
  return( s);
}

ZS: Im Anhang finden Sie ein Skript zum Testen von StringUpper().

Dateien:
 

Die Funktion StringToArrayDouble().

Diese Funktion zerlegt die Zeichenkette in reelle Zahlen, und jede Zahl wird dem Array als separates Element hinzugefügt. So viele reelle Zahlen in der Zeichenkette erscheinen, so viele Elemente werden dem Array hinzugefügt. Ein Semikolon wird als Trennzeichen erkannt. Die Funktion StringToArrayDouble() gibt die Anzahl der Array-Elemente zurück und benötigt die folgenden obligatorischen Parameter:

  • st - Eine Folge von reellen Zahlen, die durch ein Semikolon getrennt sind.
  • ad - Array mit reellen Zahlen.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.10.2008                                                     |
//|  Описание : Перенос вещественных чисел из строки в массив                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    st - строка вещественных чисел через точку с запятой                    |
//|    ad - массив вещественных чисел                                          |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//+----------------------------------------------------------------------------+
int StringToArrayDouble(string st, double& ad[]) {
  int    i=0, np;
  string stp;

  ArrayResize( ad, 0);
  while (StringLen( st)>0) {
    np=StringFind( st, ";");
    if ( np<0) {
      stp= st;
      st="";
    } else {
      stp=StringSubstr( st, 0, np);
      st=StringSubstr( st, np+1);
    }
    i++;
    ArrayResize( ad, i);
    ad[ i-1]=StrToDouble( stp);
  }
  return(ArraySize( ad));
}

ZS: Im Anhang finden Sie ein Skript zum Testen der Funktion StringToArrayDouble().