モールス符号 - ページ 2

 

活用する))

 input uint m=2314;//Входной набор двоичных данных в виде десятичного числа
 ...
 int i1;
 for(i1=0;i1<32;i1++) //Пример получения каждого бита с позиции i1 начиная с младших бит
   {
    Print((m>>i1)&1);
   }
 
Aliaksandr Hryshyn:

使用する))。


実質的には)なのですが、問題は「ユーザーが見るもの」です。2314 "という数字が表示されます。ブル、ベア - ローソク足の数とタイプに関するどのような情報?そう、情報ゼロ。入力パラメータに "101 "または "011 "がある場合のオプションを探してるんだけど・・・。

しかし、文字列を介して可能である。しかし、テスターで文字列を実行することはできません :( .バダです。

 
НО: string не прогонишь в тестере
テスターやストリングのどこが悪いのか教えてください(MT4/MT5には積極的に取り組んでいません)。
 
Vladimir Karputov:


これは実質的に)ですが、問題は「ユーザーが見るべきもの」です。NUMBER "2314 "を見ることになる。この数字とローソク足の種類は、強気、弱気とどんな情報を持っているのでしょうか?そう、情報ゼロ。入力パラメータに "101 "または "011 "がある場合のオプションを探してるんだけど・・・。

でも、文字列なら可能です。しかし、テスターで文字列を実行することはできません :( .悲しみ


トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

モールス符号

ウラジミール・パストゥシャク さん 2017.04.05 12:45


入力パラメータをint型にした後、int型をstringに変更してパースする ....


 
え、テスターで文字列の値をインクリメントできないの?
ファイルを作成し、そこにすべての文字列を入れ、文字列のインデックスを使って何をテストしたいかを決定します。
インデックスをインクリメントすることができる
 
ビット演算 >>, <<, & , | , ^ を試されましたか?
 
Sergey Dzyublik:
え、テスターで文字列の値をインクリメントできないの?ファイルを作成し、そこにすべての文字列を入れ、文字列のインデックスを使って何をテストしたいかを決定します。インデックスをインクリメントすることができる。


いや、無理でしょう。最適化しようとすると、ストラテジーテスターで すべての文字列がグレーアウトしてしまいます。
 
Vladimir Karputov:


これは実質的に)ですが、問題は「ユーザーが見るべきもの」です。2314 "という数字が表示されます。ブル、ベア - ローソク足の数とタイプに関するどのような情報?そう、情報ゼロ。入力パラメータに "101 "または "011 "がある場合のオプションを探してるんだけど・・・。

でも、文字列なら可能です。しかし、テスターで文字列を実行することはできません :( .バダです。


そうなると、残された選択肢はひとつしかない。

extern int  bars=4;//Количество используемых свечей
extern bool bar1=true;//1-я свеча
extern bool bar2=true;//...
extern bool bar3=false;
extern bool bar4=true;
extern bool bar5=true;
...
 

今のところ、ストリングに落ち着いています。

バージョン "1.000": ローソク足の組み合わせの入力パラメータ(文字列).

//+------------------------------------------------------------------+
//|                                                   Morse code.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property description "Bull candle - \"1\", bear candle - \"0\""
//---
#include <Trade\Trade.mqh>
CTrade         m_trade;                      // trading object
//---
input string               InpMorseCode   = "101";             // maximum quantity of symbols: 5
input ENUM_POSITION_TYPE   InpPosType     = POSITION_TYPE_BUY; // posinion type
input double               InpLot         = 0.1;               // lot
input ulong                m_magic        = 88430400;          // magic number
input ulong                m_slippage     = 30;                // slippage
//---
string sExtMorseCode="";
int max_len=5;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   sExtMorseCode=InpMorseCode;

   StringTrimLeft(sExtMorseCode);
   StringTrimRight(sExtMorseCode);

   if(StringLen(sExtMorseCode)>max_len)
     {
      Print("PARAMETERS INCORRECT: Code length is more than ",IntegerToString(max_len)," characters");
      return(INIT_PARAMETERS_INCORRECT);
     }

   if(StringLen(sExtMorseCode)==0)
     {
      Print("PARAMETERS INCORRECT: Length of a code is equal to zero");
      return(INIT_PARAMETERS_INCORRECT);
     }

   if(!CheckCode(sExtMorseCode))
     {
      Print("PARAMETERS INCORRECT");
      return(INIT_PARAMETERS_INCORRECT);
     }
//---
   m_trade.SetExpertMagicNumber(m_magic);

   if(IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_IOC))
      m_trade.SetTypeFilling(ORDER_FILLING_IOC);

   m_trade.SetDeviationInPoints(m_slippage);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- we work only at the time of the birth of new bar
   static datetime PrevBars=0;
   datetime time_0=iTime(0);
   if(time_0==PrevBars)
      return;
   PrevBars=time_0;

   int count=StringLen(sExtMorseCode);

   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(NULL,0,1,count,rates);
//--- Example:
//--- rates[2].time -> D'2015.05.28 00:00:00'
//--- rates[0].time -> D'2015.06.01 00:00:00'
   if(copied<=0)
     {
      Print("Error copying price data ",GetLastError());
      return;
     }

   bool result=true;

   for(int i=0;i<StringLen(sExtMorseCode);i++)
     {
      if(sExtMorseCode[i]=='0')
        {
         if(rates[i].open<rates[i].close)
           {
            result=false;
            break;
           }
        }
      else  if(sExtMorseCode[i]=='1')
        {
         if(rates[i].open>rates[i].close)
           {
            result=false;
            break;
           }
        }
     }

   if(!result)
      return;

//--- 
   if(InpPosType==POSITION_TYPE_BUY)
      m_trade.Buy(InpLot);
   else
      m_trade.Sell(InpLot);

   int d=0;
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CheckCode(const string text)
  {
   bool result=true;
   for(int i=0;i<StringLen(text);i++)
     {
      if(text[i]!='0' && text[i]!='1')
         return(false);
     }
//---
   return(result);
  }
//+------------------------------------------------------------------+ 
//| Checks if the specified filling mode is allowed                  | 
//+------------------------------------------------------------------+ 
bool IsFillingTypeAllowed(string symbol,int fill_type)
  {
//--- Obtain the value of the property that describes allowed filling modes 
   int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- Return true, if mode fill_type is allowed 
   return((filling & fill_type)==fill_type);
  }
//+------------------------------------------------------------------+ 
//| Get Time for specified bar index                                 | 
//+------------------------------------------------------------------+ 
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   datetime Time[1];
   datetime time=0;
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0) time=Time[0];
   return(time);
  }
//+------------------------------------------------------------------+

OnInit()でのチェック

  • キャリッジキャラクタ、左右のスペースとタブが最初に削除されます。
  • 最大長の超過をチェックする(このコードでは "5")。
  • ゼロ長チェック
  • 0 "と "1 "のみをチェックする(CheckCode)
OnTick()では、すでにローソク足の種類を 比較し、入力パラメータ(ローソク足の組み合わせ)を配列として参照しています。

   for(int i=0;i<StringLen(sExtMorseCode);i++)
     {
      if(sExtMorseCode[i]=='0')
        {
         if(rates[i].open<rates[i].close)
           {
            result=false;
            break;
           }
        }
      else  if(sExtMorseCode[i]=='1')
        {
         if(rates[i].open>rates[i].close)
           {
            result=false;
            break;
           }
        }
     }
ファイル:
Morse_code.mq5  12 kb
 
Vladimir Karputov:


これは実質的に)ですが、問題は「ユーザーが見るべきもの」です。2314 "という数字が表示されます。ブル、ベア - ローソク足の数とタイプに関するどのような情報?そう、情報ゼロ。入力パラメータに "101 "または "011 "がある場合のオプションを探してるんだけど・・・。

でも、文字列なら可能です。しかし、テスターで文字列を実行することはできません :( .バダです。

問題は、わかりやすさだけではありません。DECに13番があるとすると、1101か001101か0001101か、どんなパターンなのか?結局、すべての組み合わせで同じ数字「13」が得られる。