Nützliche Funktionen von KimIV - Seite 66

 
borisych писал(а) >>

...

3. In diesem Fall bezieht sich die Regression auf eine lineare Regressionsgleichung und ihr Diagramm.

Sie haben nach der Steigung der Regressionsgleichung gefragt. Ich habe Ihnen gezeigt, dass es auch anders berechnet werden kann. Wenn Sie das wollen, was Sie in Punkt 3 sagen. Unter "Nützliche Funktionen von KimIV" gibt es 2 Arten von Funktionen. Wenn Sie ein Polynom einer höheren Potenz benötigen, verwenden Sie diesen Algorithmus "Random Flow Theory and FOREX".

 

Die Funktion StrTran().

Diese Funktion ersetzt eine Teilzeichenkette. Alle Vorkommen des Begriffs werden ersetzt. So können Sie zum Beispiel auf einen Schlag alle Kommas durch Punkte oder umgekehrt ersetzen. Die Funktion StrSplit() gibt die resultierende Zeichenkette zurück und nimmt die folgenden obligatorischen Parameter entgegen:

  • str - Die Zeichenkette, in der die Teilzeichenkette strFrom ersetzt werden soll.
  • strFrom - ersetzte Teilzeichenkette. Wenn die Teilzeichenkette strFrom in der Zeichenkette str gefunden wird, wird sie durch die Teilzeichenkette strTo ersetzt.
  • strTo - Ersetzte Teilzeichenkette.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  описание : Замена подстроки                                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    str     - текстовая строка, в которой производится замена               |
//|    strFrom - заменяемая подстрока                                          |
//|    strTo   - заменяющая подстрока                                          |
//+----------------------------------------------------------------------------+
string StrTran(string str, string strFrom, string strTo) {
  int    n;
  string strOut="", strTemp;

  for ( n=0; n<StringLen( str); n++) {
    strTemp=StringSubstr( str, n, StringLen( strFrom));
    if ( strTemp== strFrom) {
      strOut=StringConcatenate( strOut, strTo);
      n= n+StringLen( strFrom)-1;
    } else strOut=StringConcatenate( strOut, StringSubstr( str, n, 1));
  }
  return( strOut);
}
 

Beispiele für die Verwendung der Funktion StrTran().

  1. Ersetzen eines Dezimalkommas durch ein Komma:
    string s=DoubleToStr(Close[1], Digits);
    Print( s);
    s= StrTran( s, ".", ",");
    Print( s);
  2. Entfernen von Leerzeichen
    string s="1 2 3 4 5 6 7 8";
    Print( s, " ", StrToInteger( s));
    s= StrTran( s, " ", "");
    Print( s, " ", StrToInteger( s));
  3. Wortersatz
    string s="листья жёлтые весной";
    Print( s);
    s= StrTran( s, "весной", "осенью");
    Print( s);

Ergebnisse der Ausführung der Beispiele:

ZY: Im Anhang finden Sie ein Skript zum Testen der Funktion StrTran().

Dateien:
 

Aktualisierte Liste der Funktionen:

Dateien:
f_kimiv.rar  12 kb
 
zhuki писал(а) >>
..
Wenn ich darf, würde ich gerne eine Funktion vorschlagen, die alles in der Taskleistenverknüpfung anzeigt.
Ich verwende es, um EAs bei der Arbeit zu überwachen, ohne das Terminal zu öffnen (viele neugierige Augen).

Zu diesem Zweck habe ich ein eigenes Programm für meine Zeit erstellt - http://www.miraxem.com/rqids.htm


Der Forex Trader's Calculator berechnet automatisch den aktuellen Gewinn/Verlust für offene Positionen und den Gewinn/Verlust bei teilweiser Schließung oder Umkehrung einer Position.

Echtzeit-Kurse und Charts für 12 Währungspaare

Sie wird als Leiste über allen Fenstern angezeigt und zeigt den aktuellen Kurs für die ausgewählten Währungspaare, Gewinn-/Verlustpunkte und einen Nachrichtenkalender mit einem Timer, der vor wichtigen Ereignissen ein Signal gibt.

 
KimIV писал(а) >>
ah... Nun, im Prinzip könnte man ein Array verwenden, das als Referenz übergeben wird. Dann wäre die Anzahl der zurückgegebenen Parameter durch die Größe des Arrays begrenzt.

Ahh... Wie war das?

"Argumente(formale Parameter) werden als Wert übergeben, d.h. jeder Ausdruck xl, . . ., xn wird berechnet und der Wert an function.... übergeben"
Beispiel aus der Hilfe

int start()
  {
   double some_array[4]={0.3, 1.4, 2.5, 3.6};
   double a= linfunc( some_array, 10.5, 8);
   //...
  }
double linfunc(double x[], double a, double b)
  {
   return ( a* x[0] + b);
  }
Und wenn Sie versuchen, x[0]=999 einer Funktion zuzuweisen, stürzt sie beim Kompilieren ab, wenn ich mich recht erinnere.
'x' - array item cannot be assigned

 
KimIV писал(а) >>
[...]
Dies sind die Handelsoperationen OP_BUY und OP_SELL, während die Aufträge nach meinem Verständnis die Handelsoperationen OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT und OP_SELLSTOP sind. Ich eröffne Positionen und erteile Aufträge. Und was öffnen Sie? Die Funktion NumberOfOrders() ist für die Arbeit mit Aufträgen konzipiert.

Eigentlich sollte es keinen Unterschied machen. Es sollte auch mit Positionen funktionieren.
Die Funktion vergleicht ot=OrderType
();

und OrderType()
"Gibt den Operationstyp des aktuell ausgewählten Auftrags zurück. Es kann einer der folgenden Werte sein:
OP_BUY - Kaufposition,
OP_SELL - Verkaufsposition,
...

 
diakin писал(а) >>
Ahh... Wie war das?

Ich habe wörtlich Folgendes gemeint:

void start()
{
  double some_array[];
  string st="";
  linfunc( some_array);
  for (int i=0; i<ArraySize( some_array); i++)
  {
    st=StringConcatenate( st, "some_array[", i, "]=", some_array[ i], "\n");
  }
  Comment( st);
}
void linfunc(double& x[])
{
  ArrayResize( x, 7);
  for (int i=0; i<ArraySize( x); i++)
  {
    x[ i]=0.7*( i+0.1);
  }
}

diakin schrieb >>
x' - Array-Element kann nicht zugewiesen werden

anstelle von:

double linfunc(double x[], double a, double b)

müssen Sie

double linfunc(double& x[], double a, double b)
 
diakin писал(а) >>
Eigentlich sollte es keinen Unterschied machen. Sollte auch mit Positionen funktionieren.

Die Unterteilung in Positionen und Aufträge ist künstlich. Sie wurde von mir für meine persönliche Bequemlichkeit erfunden. Sie beruht auf den folgenden Unterschieden:

1. Der Eröffnungs-/Einstellungskurs eines Auftrags kann geändert werden (OrderOpenPrice()), während die Position nicht geändert werden kann.

Eine Order muss gelöscht werden (OrderDelete()), während eine Position geschlossen werden muss (OrderClose()).

3. Sie können die Auftragslosgröße (Kommentar, magische Zahl) ändern, ohne dass sich dies auf die Einzahlung auswirkt. Löschen Sie den alten Auftrag und legen Sie einen neuen mit der neuen Losgröße an (Kommentar, magische Zahl). Wenn Sie mit der Position dasselbe tun, entsteht ein Verlust in Höhe des Spreads multipliziert mit der Lotgröße und dem Punktwert.

4. Ein Auftrag hat eine Lebensdauer, eine Position nicht.

 
KimIV писал(а) >>

Ich habe wörtlich Folgendes gemeint:

anstelle von:

.

Ich danke Ihnen! Jetzt weiß ich, dass man es auch per Verweis machen kann...

Warum sollte der MQLQLQL-Helfer in einem Abschnitt schreiben, dass Parameter als Wert übergeben werden, und in einem anderen, dass "es möglich ist, sie als Referenz zu übergeben" ....?

omg!

Was die Aufträge betrifft, habe ich weiter gelesen, was das Problem ist (>1 && <6), d.h. OP_BUY, OP_SELL gehören nicht hierher.

Übrigens kann die magische Zahl nicht über OrderModify() geändert werden. Oder habe ich wieder etwas übersehen? ;-()