Nur "Nützliche Funktionen von KimIV". - Seite 11

 
Alles, was ich bekam, waren diese Funktionen, und ich beschloss, die Logik des Programmierers zu verstehen. Deshalb stelle ich ja die Fragen. Dafür ist dieses Forum da.
 
satop:

DistMarketAndPos() Funktion.

Los geht's! Hier kommen weitere interessante Funktionen! Sie gibt zum Beispiel den Abstand in Pips zwischen dem Markt und der nächstgelegenen Position an. Eine genauere Auswahl der zu prüfenden Positionen wird durch externe Parameter festgelegt:

  • sy - Name des Instruments. Wenn dieser Parameter gesetzt ist, prüft die Funktion nur die Positionen des angegebenen Instruments. Das "" oder NULL bedeutet das aktuelle Symbol.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Kennung der Position (MagicNumber). Der Standardwert von -1 bedeutet eine beliebige MagicNumber.


satop:

Die Funktion DistMarketAndPos().

Los geht's! Gehen wir zu interessanteren Funktionen über! Sie gibt zum Beispiel die Entfernung zwischen dem Markt und der nächstgelegenen Position in Punkten an. Die genauere Auswahl der zu prüfenden Positionen wird durch externe Parameter festgelegt:

  • sy - Name des Instruments. Wenn dieser Parameter gesetzt ist, prüft die Funktion nur die Positionen des angegebenen Instruments. Das "" oder NULL bedeutet das aktuelle Symbol.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Kennung der Position (MagicNumber). Der Standardwert -1 bedeutet eine beliebige MagicNumber.


Ichversuche, es hin und her zu schaffen und Aufträge hin und her zu öffnen. Ich habe einen Fehler, helfen Sie mir, ihn zu beheben.

extern int TakeProfit = 150;

extern double Lot = 0,01;

extern inttern MAGIC = 1234;

int start()

{

wenn (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point)

}

zurück(0);

}

int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1)

{

Doppel-D, P;

int i, k=OrdersTotal(), r=1000000;


if (sy=="" || sy=="0") sy=Symbol();

p=MarketInfo(sy, MODE_POINT);

if (p==0) if (StringFind(sy, "")<0) p=0,00001; sonst p=0,01;

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

{

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

wenn ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

if (mn<0 || OrderMagicNumber()==mn)

{

if (Auftragsart()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

if (r>d) r=NormalizeDouble(d, 0);

}

wenn (Auftragsart()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

if (r>d) r=NormalizeDouble(d, 0);

}

}

}

}

}

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


wenn (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);

}

zurück(0);


{

int DistMarketAndPos(string sy="", int op=OP_SELL, int mn=-1) //diese Zeile ergibt 1 Fehler,

//wenn diese Zeile entfernt wird,

//er kompiliert, aber dann

//Ich setze nicht op=OP_SELL,

//und ohne sie wird der Expert Advisor denken,

//dass der Auftrag, aus dem Sie berechnen wollen

//Entfernung ist OP_BUY

if (sy=="" || sy=="0") sy=Symbol();

p=MarketInfo(sy, MODE_POINT);

if (p==0) if (StringFind(sy, "")<0) p=0,00001; sonst p=0,01;

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

wenn ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

if (mn<0 || OrderMagicNumber()==mn)

{

if (Auftragsart()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

if (r>d) r=NormalizeDouble(d, 0);

}

wenn (Auftragsart()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

if (r>d) r=NormalizeDouble(d, 0);

}

}

}

}

}

zurück(r);

zurück(r);

}

}

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

DANKESCHÖN

 
qwanya:


Ichversuche, das Programm zum Laufen zu bringen und Bestellungen zu öffnen. Ich habe einen Fehler, den ich nicht loswerde, bitte helfen Sie mir, ihn zu beheben.

DANKESCHÖN


Sie sollten es versuchen:

Und bei Fragen hier...

extern  int     TakeProfit = 150;
extern  double  Lot        = 0.01;
extern  int     MAGIC=1234;
      
      
//=====================================================================
  int    start()
      {
     if (DistMarketAndPos(NULL,OP_BUY)>150)
            {                                     
            OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point);
            }
          
     if (DistMarketAndPos(NULL,OP_SELL)>150)
            {                                     
         OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);   
            }            
       return(0);
       }
          
//========================================================================          
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Bitte hinterlassen Sie Ihre Kommentare im Quellcode-Zweig. Tür zur Quelle (Nützliche Funktionen von KimIV).
 
Bitte hinterlassen Sie Ihre Kommentare im Quellcode-Zweig. Tür zur Quelle (Nützliche Funktionen von KimIV).
 
satop:

Funktion MovingInWL().

Kann mir jemand erklären, warum man Funktionen, die nicht funktionieren, veröffentlichen sollte?

'LevelWLoss' - nicht angegebener Bezeichner
'LevelProfit' - nicht angegebener Bezeichner
'ModifyOrder' - Funktion nicht definiert
'LevelWLoss' - nicht angegebener Bezeichner
'LevelProfit' - nicht angegebener Bezeichner
'ModifyOrder' - Funktion nicht definiert
6 Fehler, 0 Warnung(en)

und dies innerhalb der Funktion selbst

 
DenisovOleg:

Kann mir jemand erklären, warum man Funktionen, die nicht funktionieren, veröffentlichen sollte?

'LevelWLoss' - nicht angegebener Bezeichner
'LevelProfit' - nicht angegebener Bezeichner
'ModifyOrder' - Funktion nicht definiert
'LevelWLoss' - nicht angegebener Bezeichner
'LevelProfit' - nicht angegebener Bezeichner
'ModifyOrder' - Funktion nicht definiert
6 Fehler, 0 Warnung(en)

und dies ist innerhalb der Funktion selbst

Die Funktion funktioniert, aber sie ruft die Funktion ModifyOrder auf, die zum EA-Code hinzugefügt werden sollte, und fügt dem EA auch die Variablen LevelWLoss und LevelProfit hinzu, etwa wie folgt

extern int LevelProfit = 1000;

extern int LevelWLoss = 50;

 
Виктор
Iurii Tokman

Vielen Dank für diesen Forumsbeitrag. Ein großes Dankeschön an lurii Tokman für die Beiträge. Ich persönlich bin fast so weit, ihn mit Stroustrup gleichzusetzen.
Ich danke Ihnen!

 
Iurii Tokman:

Die Funktion GetAmountLotFromOpenPos().

Diese Funktion gibt die Summe der Lose der offenen Positionen zurück. Eine genauere Auswahl der zu berücksichtigenden Positionen wird durch externe Parameter festgelegt:

  • sy - Bezeichnung des Marktinstruments. Wenn dieser Parameter gesetzt ist, berücksichtigt die Funktion nur Positionen des angegebenen Symbols. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. NULL bedeutet das aktuelle Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Positionsbezeichner, MagicNumber. Der Standardwert -1 bedeutet einen beliebigen Bezeichner.

Kommt nicht zurück!!!

egal wie ich es mache, entweder Nullen oder " Ereignisbehandlungsfunktion nicht gefunden 4.mq4 1 1
"

 
Aleksey Maryaskin:

Vielen Dank für diesen Forumsbeitrag. Ein großes Dankeschön an lurii Tokman für die Beiträge. Ich persönlich bin fast so weit, ihn mit Stroustrup gleichzusetzen.
Ich danke Ihnen!

Vergessen Sie nicht, auch dem Autor der Beiträge zu danken.
Grund der Beschwerde: