設定でシンボルを選択する - ページ 2

 
Alexey Viktorov:

私たちは違うことを話しているのです。

はい、プログラム本体では簡単です。

テスターのパラメータタブで最適化のためのパラメータを選択することですが...。

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

そこで、「市場概況」からシンボルのリストがあると非常に便利です。

そこも何も変換する必要はありません。公開リスト、すでに用意された社内リストに与えるだけ...。

 

more, カップル

 
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

 
Михаил:

そう、誰かが必要としているのだ)

あとは、このリストと「市場概観」ウィンドウを同期させるだけです...。この可能性は、私の記憶違いでなければ、どこかで言及されていたように思います。

でも、リストが用意されていると楽ですよね~。

Expert Advisorを作成し、多くのペアでそれをテストするテスターに適しています。

 
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:

正しい使い方は?

このような使い方をするために

をする必要があります。

コードの使い方を教えてください。


文字の配列を埋めて、その配列で作業する。

このコードを使った無料のEAを紹介します ***。


ps; tumblrさん、無駄にリンクを外すべきでしたね。私がマーケットプレイスで販売している商品のうち、有料なのは2つだけです。2017年のものは4回借りていて、2014年の10銭のものは一度も買っていない。だから、ここには期待するような広告はない。

 
Alexey Viktorov:

...drubashkaさん、リンクは消さない方が良かったのでは...。

モデレーターがフォーラムを読んでいるのですから、そのようなリストが登場することを期待しましょう

 
Alexey Viktorov:

文字の配列を記入 し、この配列で作業を行う。

上記のコードを使った無料のEAがあります***。


ps; drubashkaさん、リンクは外さない方が良かったですよ。私がマーケットプレイスで販売している商品のうち、有料なのは2つだけです。2017年のものは4回レンタルしており、2014年の10銭のものは一度も買っていません。だから、ここには期待するような広告はない。

残念ながら、マーケットプレイスのものについては、有料・無料を問わず、フォーラムで議論することはできません。何度も言われていることです。時間があれば、自分で検索してみるのもいいでしょう。