摩尔斯电码 - 页 2 12345678910 新评论 Aliaksandr Hryshyn 2017.04.05 10:58 #11 充分利用))。 input uint m=2314;//Входной набор двоичных данных в виде десятичного числа ... int i1; for(i1=0;i1<32;i1++) //Пример получения каждого бита с позиции i1 начиная с младших бит { Print((m>>i1)&1); } Vladimir Karputov 2017.04.05 11:04 #12 Aliaksandr Hryshyn:使用))。 这实际上是(#4)--但问题是用户会看到什么。他将看到数字 "2314"。有关烛台的数量和类型的信息是什么--牛市、熊市?对,零信息。我正在寻找一个选项,当用户在输入参数中看到 "101 "或 "011 "时...但通过字符串是可以的。是的,这将是很好的信息,但是:你不能在测试器中运行字符串:( 。巴达。 Sergey Dzyublik 2017.04.05 11:07 #13 НО: string не прогонишь в тестере 你能告诉我测试器和字符串有什么问题吗? (没有积极从事MT4/MT5的工作) Vladimir Pastushak 2017.04.05 11:11 #14 Vladimir Karputov: 这实际上是(#4)--但问题是用户会看到什么。他将看到数字 "2314"。这个数字和蜡烛图的类型有什么信息--看涨、看跌?对,零信息。我正在寻找一个选项,当用户在输入参数中看到 "101 "或 "011 "时...但用一个字符串就可以了。是的,这将是很好的信息,但是:字符串不能在测试器中运行:( 。悲伤。 关于交易、自动交易系统和策略测试的论坛 摩尔斯电码 Vladimir Pastushak, 2017.04.05 12:45 使输入参数为int类型,然后将int类型改为字符串并解析....。 Sergey Dzyublik 2017.04.05 11:15 #15 哦,你不能为测试器中的字符串增加值? 创建一个文件,将所有的字符串放入其中,并使用字符串索引来确定你要测试的内容。 索引可以被递增 Vitalii Ananev 2017.04.05 11:24 #16 你是否尝试过位操作>>, <<, & , | , ^ Vladimir Karputov 2017.04.05 11:28 #17 Sergey Dzyublik: 哦,你不能为测试器中的字符串增加值?创建一个文件,将所有的字符串放入其中,并使用字符串索引来确定你要测试的内容。索引可以递增。 不,你不能。当你试图优化时,所有字符串在策略测试器中 都是灰色的。 Aliaksandr Hryshyn 2017.04.05 11:32 #18 Vladimir Karputov: 这实际上是(#4)--但问题是用户会看到什么。他将看到数字 "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; ... Vladimir Karputov 2017.04.05 11:39 #19 到目前为止,我已经确定了绳子。版本 "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 Vasiliy Sokolov 2017.04.05 12:04 #20 Vladimir Karputov: 这实际上是(#4)--但问题是用户会看到什么。他将看到数字 "2314"。有关烛台的数量和类型的信息是什么--牛市、熊市?对,零信息。我正在寻找一个选项,当用户在输入参数中看到 "101 "或 "011 "时...但用一个字符串就可以了。是的,这将是很好的信息,但是:字符串不能在测试器中运行:( 。巴达。 这个问题不仅仅是清晰度的问题。假设在DEC中有数字13,它是什么样的模式:1101或001101或0001101?毕竟,所有的组合都产生相同的数字13。 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
充分利用))。
使用))。
这实际上是(#4)--但问题是用户会看到什么。他将看到数字 "2314"。有关烛台的数量和类型的信息是什么--牛市、熊市?对,零信息。我正在寻找一个选项,当用户在输入参数中看到 "101 "或 "011 "时...
但通过字符串是可以的。是的,这将是很好的信息,但是:你不能在测试器中运行字符串:( 。巴达。
这实际上是(#4)--但问题是用户会看到什么。他将看到数字 "2314"。这个数字和蜡烛图的类型有什么信息--看涨、看跌?对,零信息。我正在寻找一个选项,当用户在输入参数中看到 "101 "或 "011 "时...
但用一个字符串就可以了。是的,这将是很好的信息,但是:字符串不能在测试器中运行:( 。悲伤。
关于交易、自动交易系统和策略测试的论坛
摩尔斯电码
Vladimir Pastushak, 2017.04.05 12:45
使输入参数为int类型,然后将int类型改为字符串并解析....。
创建一个文件,将所有的字符串放入其中,并使用字符串索引来确定你要测试的内容。
索引可以被递增
哦,你不能为测试器中的字符串增加值?创建一个文件,将所有的字符串放入其中,并使用字符串索引来确定你要测试的内容。索引可以递增。
不,你不能。当你试图优化时,所有字符串在策略测试器中 都是灰色的。
这实际上是(#4)--但问题是用户会看到什么。他将看到数字 "2314"。有关烛台的数量和类型的信息是什么--牛市、熊市?对,零信息。我正在寻找一个选项,当用户在输入参数中看到 "101 "或 "011 "时...
但用一个字符串就可以了。是的,这将是很好的信息,但是:字符串不能在测试器中运行:( 。巴达。
那么就只剩下一个选择了。
到目前为止,我已经确定了绳子。
版本 "1.000":烛台组合的输入参数为字符串。
在OnInit()中检查
这实际上是(#4)--但问题是用户会看到什么。他将看到数字 "2314"。有关烛台的数量和类型的信息是什么--牛市、熊市?对,零信息。我正在寻找一个选项,当用户在输入参数中看到 "101 "或 "011 "时...
但用一个字符串就可以了。是的,这将是很好的信息,但是:字符串不能在测试器中运行:( 。巴达。