Выбрать символ в настройках - страница 2

 
Alexey Viktorov:

Мы о чём-то разном говорим.

Да. В теле программы это легко.

А я говорю о выборе параметров для оптимизации, на вкладке параметры тестера...

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

Вот там было-бы очень удобно иметь перечень символов из "обзора рынка".

Там и преобразовывать ничего не надо. Просто отдать в публичный перечень, уже готовый внутренний список...

 

добавил ещё, пары 

 
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:

добавил ещё, пары 

Ну да, кому-то пригодится)

Теперь осталось с этим списком синхронизировать окно "обзор рынка"... вроде где-то мелькала такая возможность, если я не путаю.

Но было-бы проще иметь готовый список!

 
Alexey Viktorov:

Мы о чём-то разном говорим.

вставил ваш код - чтобы считало все открытые пары и вычитало правильный лот. только я кажись здесь что то глуплю - наверное этот код сюда не подходит ?

 
 

но , лот меняет

//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+
 

 не знаю - толи ваш код, такое натворил 

Снимок222

 

 
Михаил:

Ну да, кому-то пригодится)

Теперь осталось с этим списком синхронизировать окно "обзор рынка"... вроде где-то мелькала такая возможность, если я не путаю.

Но было-бы проще иметь готовый список!

это подойдёт для тестера . создать эксперта и тестировать с множеством пар 

 
Aleksandr Klapatyuk:

вставил ваш код - чтобы считало все открытые пары и вычитало правильный лот. только я кажись здесь что то глуплю - наверное этот код сюда не подходит ?

но , лот меняет

 не знаю - толи ваш код, такое натворил 



 

А вот если фиксировать прибыль, закрытием сделок? )) Когда зелёненькая уже отошла от синенькой? На n-ную величину? в конце может всё повеселее стать?

 
Alexey Viktorov:

Мы о чём-то разном говорим.

как его правильно задействовать ?

для того, чтобы использовать - такое.

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;  // Пара

нужно что то ещё сделать , что бы оно заработало .

как задействовать ваш код?

//+------------------------------------------------------------------+
//| 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:

как его правильно задействовать ?

для того, чтобы использовать - такое.

нужно что то ещё сделать , что бы оно заработало .

как задействовать ваш код?


 

Заполнить массив символов и работать с этим массивом.

Тут бесплатный советник использующий приведённый кусок кода *** 


ps; барабашка, зря вы удалили ссылку. Среди моих продуктов в маркете, только ДВА платных. Один из них от 2017 года арендован 4 раза, а второй от 2014 года за 10 баксов не куплен ни разу. Так-что тут никакой рекламы и не предвиделось.

 
Alexey Viktorov:

... барабашка, зря вы удалили ссылку....

Раз модераторы читают форум, значит можно наедятся на появление такого перечня!

 
Alexey Viktorov:

Заполнить массив символов и работать с этим массивом.

Тут бесплатный советник использующий приведённый кусок кода *** 


ps; барабашка, зря вы удалили ссылку. Среди моих продуктов в маркете, только ДВА платных. Один из них от 2017 года арендован 4 раза, а второй от 2014 года за 10 баксов не куплен ни разу. Так-что тут никакой рекламы и не предвиделось.

К сожаления нельзя обсуждать на форуме ничего из Маркета - ни платного, ни бесплатного. Сто раз говорено. Будет время - Вы сами поиском сможете найти.

Причина обращения: