Wählen Sie ein Symbol in den Einstellungen - Seite 2

 
Alexey Viktorov:

Wir reden hier über etwas anderes.

Ja, im Hauptteil des Programms ist es ganz einfach.

Und ich spreche von der Auswahl der Parameter für die Optimierung auf der Registerkarte "Testerparameter"...

input  ... это показывает)

Hier wäre es sehr praktisch, eine Liste der Symbole aus der "Marktübersicht" zu haben.

Sie müssen dort auch nichts umwandeln. Geben Sie der öffentlichen Liste einfach die bereits vorbereitete interne Liste...

 

hinzugefügt mehr, paare

 
enum Enum_Symbol {EURUSD,GBPUSD,USDCHF,USDJPY,USDCAD,AUDUSD,AUDNZD,AUDCAD,AUDCHF,AUDJPY,
                  CHFJPY,EURGBP,EURAUD,EURCHF,EURJPY,EURNZD,EURCAD,GBPCHF,GBPJPY,CADCHF
                 };
//--- Входящие параметры
input  Enum_Symbol     SIMBOL_1                 = EURUSD;         // Пара
input  Enum_Symbol     SIMBOL_2                 = EURUSD;         // Пара
input  Enum_Symbol     SIMBOL_3                 = EURUSD;         // Пара
 
Aleksandr Klapatyuk:

mehr hinzugefügt, Paare.

Ja, nun, jemand wird es brauchen)

Jetzt müssen Sie nur noch das Fenster "Marktübersicht" mit dieser Liste synchronisieren... Ich glaube, eine solche Möglichkeit wurde irgendwo erwähnt, wenn ich mich nicht irre.

Aber es wäre einfacher, eine Liste parat zu haben!

 
Alexey Viktorov:

Wir reden nicht über dieselbe Sache.

Ich habe Ihren Code eingefügt - um alle offenen Paare zu zählen und das richtige Los abzuziehen. Aber ich glaube, ich bin hier dumm - vielleicht passt dieser Code nicht hierher?

 
 

Aber es verändert das Ganze.

//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double TradeSizeOptimized(void)
  {
   double price=0.0;
   double margin=0.0;
   string arr[];
   int resize = 0, syTotal = SymbolsTotal(true);
   for(int i = 0; i < syTotal; i++)
     {
      string name = SymbolName(i, true);
      if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
        {
         resize = ArrayResize(arr, i+1);
         arr[i] = name;
        }
      //--- select lot size

      if(!SymbolInfoDouble(arr[i],SYMBOL_ASK,price))
         return(0.0);
      if(!OrderCalcMargin(ORDER_TYPE_BUY,arr[i],1.0,price,margin))
         return(0.0);
      if(margin<=0.0)
         return(0.0);
     }
   double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*MaximumRisk/margin,2);
//--- calculate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      //--- select history for access
      HistorySelect(0,TimeCurrent());
      //---
      int    orders=HistoryDealsTotal();  // total history deals
      int    losses=0;                    // number of losses orders without a break

      for(int y=orders-1; y>=0; y--)
        {
         ulong ticket=HistoryDealGetTicket(y);
         if(ticket==0)
           {
            Print("HistoryDealGetTicket failed, no trade history");
            break;
           }
         for(int i = 0; i < syTotal; i++)
           {
            string name = SymbolName(i, true);
            if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
              {
               resize = ArrayResize(arr, i+1);
               arr[i] = name;
              }
            //--- check symbol
            if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=arr[i])
               continue;
            //--- check Expert Magic number
            if(HistoryDealGetInteger(ticket,DEAL_MAGIC)!=MA_MAGIC)
               continue;
            //--- check profit
            double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
            if(profit>0.0)
               break;
            if(profit<0.0)
               losses++;
           }
        }
      //---
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
   for(int i = 0; i < syTotal; i++)
     {
      string name = SymbolName(i, true);
      if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
        {
         resize = ArrayResize(arr, i+1);
         arr[i] = name;
        }
      //--- normalize and check limits
      double stepvol=SymbolInfoDouble(arr[i],SYMBOL_VOLUME_STEP);
      lot=stepvol*NormalizeDouble(lot/stepvol,0);
      double minvol=SymbolInfoDouble(arr[i],SYMBOL_VOLUME_MIN);
      if(lot<minvol)
         lot=minvol;
      double maxvol=SymbolInfoDouble(arr[i],SYMBOL_VOLUME_MAX);
      if(lot>maxvol)
         lot=maxvol;
     }
//--- return trading volume
   return(lot);
  }
//+------------------------------------------------------------------+
 

Ich weiß nicht, ob es Ihr Code ist, der dies tut.

Schnappschuss222

 
Михаил:

Ja, jemand wird es brauchen)

Jetzt müssen Sie nur noch das Fenster "Marktübersicht" mit dieser Liste synchronisieren... Ich glaube, diese Möglichkeit wurde irgendwo erwähnt, wenn ich mich nicht irre.

Aber es wäre einfacher, eine Liste parat zu haben!

Dies würde sich für einen Tester eignen. Erstellen Sie einen Expert Advisor und testen Sie ihn mit vielen Paaren

 
Aleksandr Klapatyuk:

Ich habe Ihren Code eingefügt - um alle offenen Paare zu zählen und das richtige Los abzuziehen. Aber ich glaube, ich bin hier dumm - vielleicht passt dieser Code nicht hierher?

Aber es verändert das Ganze.

Ich weiß nicht, ob es an Ihrem Code liegt.



Was, wenn Sie den Gewinn durch das Schließen von Geschäften fixieren? )) Wenn sich Grün bereits von Blau entfernt hat? Um den n-ten Wert? Am Ende darf es fröhlicher werden?

 
Alexey Viktorov:

Wir reden nicht über dieselbe Sache.

wie man es richtig benutzt?

um es zu benutzen, ist es so.

enum Enum_Symbol {EURUSD,GBPUSD,USDCHF,USDJPY,USDCAD,AUDUSD,AUDNZD,AUDCAD,AUDCHF,AUDJPY,
                  CHFJPY,EURGBP,EURAUD,EURCHF,EURJPY,EURNZD,EURCAD,GBPCHF,GBPJPY,CADCHF
                 };
//--- Входящие параметры
input Enum_Symbol     SIMBOL_1                 = EURUSD;  // Пара
input Enum_Symbol     SIMBOL_2                 = EURUSD;  // Пара
input Enum_Symbol     SIMBOL_3                 = EURUSD;  // Пара

müssen Sie etwas anderes tun, damit es funktioniert.

Wie können wir Ihren Code verwenden?

//+------------------------------------------------------------------+
//| function                                                         |
//+------------------------------------------------------------------+
void XXXXXX()
  {
   string arr[];
   int resize = 0, syTotal = SymbolsTotal(true);
   for(int i = 0; i < syTotal; i++)
     {
      string name = SymbolName(i, true);
      if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
        {
         resize = ArrayResize(arr, i+1);
         arr[i] = name;
        }
     };
  };
//+------------------------------------------------------------------+
 
Aleksandr Klapatyuk:

wie man es richtig benutzt?

Um es auf diese Weise zu verwenden.

müssen Sie etwas anderes tun, damit es funktioniert.

Wie kann ich Ihren Code verwenden?


Füllen Sie eine Reihe von Zeichen und arbeiten Sie mit dieser Reihe.

Hier ist ein kostenloser EA, der dieses Stück Code verwendet ***


ps; tumblr, du hättest den Link umsonst entfernen sollen. Von meinen Produkten auf dem Marktplatz sind nur ZWEI bezahlt. Eine von 2017 wurde 4 Mal gemietet und die andere von 2014 für 10 Pfund wurde kein einziges Mal gekauft. Hier ist also keine Werbung zu erwarten.

 
Alexey Viktorov:

... drubashka, du hättest den Link nicht löschen sollen....

Da die Moderatoren das Forum lesen, können wir hoffen, dass eine solche Liste erscheint!

 
Alexey Viktorov:

Füllen Sie eine Reihe von Zeichen aus und arbeiten Sie mit dieser Reihe.

Es gibt einen kostenlosen EA, der den oben genannten Code verwendet ***


ps; drubashka, du hättest den Link nicht entfernen sollen. Von meinen Produkten auf dem Marktplatz sind nur ZWEI bezahlt. Die eine von 2017 wurde 4 Mal gemietet, die andere von 2014 für 10 Pfund wurde nicht ein Mal gekauft. Hier ist also keine Werbung zu erwarten.

Leider kann man im Forum nicht über Produkte aus dem Marktplatz diskutieren, weder über kostenpflichtige noch über kostenlose. Das ist schon hundertmal gesagt worden. Wenn Sie Zeit haben, können Sie sie selbst suchen.