Frage zum Berater für mehrere Währungen - Seite 3

 

Danke, Komposter. Angefangen zu tun!

Aber jetzt kommt eine andere Frage! Mein Expert Advisor hat separate Positionseröffnungsblöcke und Trailing Bars.

int start()
  {
// ЗАДАЕМ ПЕРЕМЕННЫЕ ДЛЯ ВСЕХ ПАР
 
 
 // ОТКРЫВАЕМ ПОЗИЦИИ ПО ВСЕМ ПАРАМ
 
//----------------------------------------------
// -------- ТРЕЙЛИНГ СТОПЫ -----------------------
if (UseTrailing_ == True)                                             {                  
for (int r=0; r<OrdersTotal(); r++)                                    {
    if (OrderSelect(r, SELECT_BY_POS, MODE_TRADES))                     {
//--------------------------------------------------
     if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==MagicGBPUSD)     
      {  Трейлинг по фунту }
//--------------------------------------------------
     if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==MagicEURUSD)     
      {  Трейлинг по евро }
//--------------------------------------------------------------------
                                                                       }
                                                                      }
                                                                     }
//----------------------------------------------------------------------
   } 
  return(0);
JEDOCH habe ich ein Stück Code (z.B. für das Pfund) in das Schleppnetz eingefügt -

double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Aber ich habe diesen Teil bereits genutzt, als ich eine Position in GBP eröffnet habe. Darf ich jetzt wieder denselben Trailing-Stopper verwenden? Oder muss ich denselben abschließenden Teil für das Pfund erneut eingeben, allerdings mit leicht abweichenden Namen der Werte?

 
rid:
JEDOCH habe ich ein Stück Code (z.B. für das Pfund) in das nachgestellte -
double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Aber ich habe diesen Slice schon einmal verwendet, als ich eine Position auf das Pfund eröffnet habe. Kann ich das gleiche Stück jetzt noch einmal im Schleppnetz verwenden? Oder muss ich das gleiche Stück mit leicht abweichenden Namen für diese Werte im Schleppnetz für das Pfund erneut eingeben?

Sie können "this bit" ganz am Anfang der start()-Funktion einfügen und variable Werte in allen Blöcken verwenden.
 

Herzlichen Dank für Ihre Antwort! komposter !

Eine letzte wichtige Frage. (Ich habe Angst, zu aufdringlich zu klingen, aber...) -

Für das dritte Paar rufe ich (aus verschiedenen Gründen) die Nachlaufbibliothek auf. Zum Beispiel aus dem Ordner librares.

Wie soll man in diesem Fall vorgehen? Ist es notwendig, für dieses Paar dasselbe in der Bibliothek anzugeben?

//RefreshRates();
 double bid = MarketInfo("USDCHF", MODE_BID);
 double ask = MarketInfo("USDCHF", MODE_ASK);
 double point =MarketInfo("USDCHF",MODE_POINT);

und ändern Sie das Symbol und die Magie entsprechend:

... .... .....
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        if (OrderType()==OP_BUY) {
          if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
            if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
              ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy); 
 .... ... ...
 
rid:

Für das dritte Paar rufe ich (aus verschiedenen Gründen) die Nachlaufbibliothek auf. Zum Beispiel aus dem Ordner libraris.
Wie soll man in diesem Fall vorgehen? Muss ich in der Bibliothek eine ähnliche Einstellung vornehmen?

Das hängt von der Bibliothek ab. Wenn es weiß, wie man mit nicht nativen Zeichenfolgen umgeht, wird es kein Problem sein. Wenn nicht, wird es schlecht sein ;)
 

Dies ist die dreistufige Ausgabebibliothek von Kim. Jetzt habe ich mir den Code angesehen. Anstelle eines Symbols setze ich überall den Namen des Paares und anstelle einer Magie setze ich die Magie meines Paares.

//+------------------------------------------------------------------+
//|                                                  a-TLE_v.1.6.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  v.1.6  Три уровня переноса стопа.                               |
//| 23.11.2005 v.a1.6  Реализация в виде универсального модуля.      |
//|                                                                  |
//|   Для использования добавить строку в модуле start               |
//|   if (UseTrailing) TrailingPositions();                          |
//+------------------------------------------------------------------+
 
//------- Внешние параметры модуля - уровни переноса--------------------
... ... ... ...
 
//+------------------------------------------------------------------+
//| Сопровождение позиций                                            |
//+------------------------------------------------------------------+
void TrailingPositions()                                  {
  for (int i=0; i<OrdersTotal(); i++)                       {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))           {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        ThreeLevelSystemOfOutput();
      }
    }
  }
}
 
//+------------------------------------------------------------------+
//| Трёхуровневая система выходов                                    |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput()                      {
   int sp=MarketInfo(OrderSymbol(), MODE_SPREAD);
  if ( бла-бла-бла)                                  {
    SimpleTrailingPositions();
                                                      }
                                                      }
 
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void SimpleTrailingPositions() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
... ... ...
   
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
... ... ...
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int pp) {
    double ldSL=0, mp=MarketInfo(OrderSymbol(), MODE_POINT);  
 ... ... ...  
//+------------------------------------------------------------------+
//| Возвращает профит позиции в пунктах                              |
//+------------------------------------------------------------------+
int ProfitPosition() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double pr=0;
 
  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    pr=(pBid-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    pr=(OrderOpenPrice()-pAsk)/pp;
  }
  return(MathRound(pr));
}
 
//+------------------------------------------------------------------+
//| Возвращает StopLoss позиции в пунктах                            |
//+------------------------------------------------------------------+
int StopLossInPoint() {
  double pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double sp=0;
 
  if (OrderType()==OP_BUY) {
    sp=(OrderStopLoss()-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    sp=(OrderOpenPrice()-OrderStopLoss())/pp;
  }
  if (OrderStopLoss()==0) sp=-OrderOpenPrice()/pp;
  return(MathRound(sp));
}
//+------------------------------------------------------------------+

Sie können sehen, dass es ein wenig unscharf ist mit all den verschiedenen

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);

und das bei fast jeder Operation!

Aber ich habe nur das Symbol (ich habe das Paar angegeben) und den Magier ganz am Anfang geändert! Ich habe den Expert Advisor online in einem Zeitrahmen von 1 Minute gestartet. Ich habe auf den Gewinn gewartet und die Kursbewegung bei diesem Paar gestoppt. Alles scheint gut zu funktionieren. Ich bin in Übereinstimmung mit dem Algorithmus dieser Bibliothek.

Aber bei zwei anderen Paaren (mit meinen eigenen Schleppnetzen) habe ich noch nicht profitiert.

Ich werde es mir morgen online ansehen.

 
rid:

Dies ist die dreistufige Ausgabebibliothek von Kim. Jetzt habe ich mir den Code angesehen. Anstelle eines Symbols setze ich überall den Namen des Paares und anstelle einer Magie setze ich die Magie meines Paares.

...

Sie können sehen, dass es ein wenig unscharf ist mit all den verschiedenen

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
Die Bibliothek ist kompetent geschrieben - es gibt keine Verknüpfung mit dem Diagrammwerkzeug.
Sie kann daher ohne Änderungen verwendet werden.
 

Nochmals vielen Dank, komposter, für Ihre Antworten!

Nun wartete ich online auf die Gewinne bei allen drei Paaren meines Expert Advisors. Es scheint, dass jedes Paar nach seinem eigenen Schleppnetzmodus arbeitet! Einschließlich des Paares mit dem Bibliotheksaufruf!

 
komposter:
los:

Dies ist die dreistufige Ausgabebibliothek von Kim. Jetzt habe ich mir den Code angesehen. Anstelle eines Symbols setze ich überall den Namen des Paares und anstelle einer Magie setze ich die Magie meines Paares.

...

Sie können sehen, dass es ein wenig unscharf ist mit all den verschiedenen

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
Die Bibliothek ist kompetent geschrieben - es gibt keine Verknüpfung mit dem Diagrammwerkzeug.
Sie kann daher ohne Änderungen verwendet werden.

Ich füge meine eigene Version hinzu... Code schneiden:


extern int    MagicNum = 400400, Stop = 33;
extern double Lot1 = 0.3;
int LotStop [8] = {28,33,43,33,33,33,33,33}; //можно юзать просто Stop
 
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
{ 
 int i, SymPermitted = 3;
 string Symbols[8] = {"EURUSD","GBPUSD","USDJPY","EURJPY","USDCHF","Reserved","Reserved","Reserved"};
 
  // Ma defence
  if (Bars<100)
    return(0);  
  
  for (i=0; i < SymPermitted; i++)
  {
    // Compile/reload/crash config defence
    if      (Symbols[i] == "EURUSD") { Stop = 28; Lot1 = 0.6; }
    else if (Symbols[i] == "GBPUSD") { Stop = 33; Lot1 = 0.2; }
    else if (Symbols[i] == "USDJPY") { Stop = 43; Lot1 = 0.6; }
    Sleep (1000); // Просто так
    Checking (Symbols[i], i);
  }
  return (0);
}
 
void Checking (string Sym, int LotStopIndex)
{
 int Total, LotStop = LotStop[LotStopIndex], i, j, Tic = 0;
 double VPoint, VAsk, VBid;
 
   Total = OrdersTotal();
 
   // Check opened
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true)
     {  
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
         return (0);
     }
   }
   
   VPoint = MarketInfo(Sym, MODE_POINT);
   //... кучка кода расчётов
   Total = HistoryTotal();
   
   if (Total == 0)
   { // Reset to default
     LotSize = Lot1;
     LotStop[LotStopIndex] = Stop;
   }
   
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (Total-i-1, SELECT_BY_POS, MODE_HISTORY) == true)
     { 
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
       { // Was loss (Alpari иногда выбивает положительные лосы и отрицательные профиты... мистика
         if (((OrderProfit ()) < 0) || (OrderClosePrice() == OrderStopLoss()))
         { ..код
         }
           
         else
         { // Reset to default
           LotSize = Lot1;
           LotStop[LotStopIndex] = Stop;
         }
         break;
       }
     }
 
     else
     {
       Print("Ошибка <", GetLastError(), "> при выборе хистори - ордера");
       return (1);
     }
  }
 
  if(AccountFreeMarginCheck(Sym, OP_BUY, LotSize) <= 0) 
  {  return (0); }
 
  
  VAsk = MarketInfo (Sym, MODE_ASK);
  VBid = MarketInfo (Sym, MODE_BID);
  // bay|sell...
  
  if (условие 1)
    Tic = OrderSend (Sym, OP_BUY, LotSize, VAsk, 3, VAsk-LotStop[LotStopIndex]*VPoint, VAsk+LotStop*VPoint, "CMATest5m", MagicNum, 0, Lime);
    
  else if (условие 2)
    Tic = OrderSend (Sym, OP_SELL, LotSize, VBid, 3, VBid+LotStop[LotStopIndex]*VPoint, VBid-LotStop*VPoint, "CMATest5m", MagicNum, 0, Red);
  
  if (Tic <= 0)
  {
    Print("Ошибка <", GetLastError(), "> при запросе ордера");
    Sleep (60000); // Ждём минуту... рынок никуда не убежит :-)...
  }
}
 

VassaV, erzählen Sie uns ein wenig mehr über das, was Sie hier gepostet haben und wie man es verwendet.

Was bedeutet der Ausdruck "cut code"?

Warum gibt es keinen Kommentar in der dritten Zeile. //können Sie...?

 
rid:

VassaV, erzählen Sie uns ein wenig mehr über das, was Sie hier gepostet haben und wie man es verwendet.

Was bedeutet der Ausdruck "cut code"?

Warum gibt es keinen Kommentar in der dritten Zeile. //kannst du... verwenden?


Zerkleinern bedeutet, dass nur noch die Basis übrig ist. Wie Sie es verwenden, bleibt Ihnen überlassen, hier nur ein Beispiel.

Dementsprechend:

//... ein Bündel von Berechnungscode - hier sein eigener Signal-/Anzeigeverarbeitungscode.

// ...code - hier haben wir unseren eigenen Code für die Verlustverarbeitung

Bedingung 1 - hier haben wir unseren eigenen Kodex für Kauf-/Verkaufsbedingungen

// können Sie ... verwenden? - es ist ein Kommentar, er wird nur so angezeigt.

Das bedeutet, dass Sie Arrays verwenden können, um die Parameter der einzelnen Währungen zu speichern, oder Sie können die Parameter im Code speichern

(Abschnitt // Konfiguration kompilieren/nachladen/abstürzen)