在设置中选择一个符号 - 页 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:

我粘贴了你的代码--计算所有未平仓对并减去正确的手数。但我认为我在这里很傻--也许这个代码不适合这里?

但它确实改变了很多。

我不知道这是否是你的代码。



如果你通过关闭交易来固定利润呢?))当绿色已经远离了蓝色?在最后,它可能会变得更加欢快?

 
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:

如何正确使用它?

为了像这样使用它。

你必须做一些其他事情来使其发挥作用。

我如何使用你的代码?


填充一个 字符数组 并对该数组进行操作。

这里有一个使用这段代码的免费EA ***


ps;tumblr,你应该删除链接,因为没有什么。在我市场上的产品中,只有两个是付费的。一个是2017年的,已经租了4次,另一个是2014年的,10英镑,一次都没买。所以这里没有广告可言。

 
Alexey Viktorov:

...drubashka,你不应该删除这个链接....

既然版主在看论坛,我们就可以希望有这样的名单出现!

 
Alexey Viktorov:

填入一个 字符数组,并对这个数组进行处理。

有一个使用上述代码的免费EA ***


ps; drubashka,你不应该删除链接。在我市场上的产品中,只有两个是付费的。一个是2017年的,已经租了4次,另一个是2014年的,10英镑,一次都没买。所以这里没有广告可言。

不幸的是,你不能在论坛上讨论市场上的任何东西,无论是付费还是免费。这句话已经说了一百遍了。如果你有时间,你可以自己搜索。