外汇交易中符号名称的最大长度 - 页 5 123456789101112 新评论 fxsaber 2018.08.25 12:24 #41 prostotrader:如果有一个头寸,所有的数据可以在图表关闭时 被检索出来,这个符号上的挂单可以简单地被 "钉死"。 拿它来做什么?你的变体的严重缺点是对图表手柄的约束。 没有人想到一个更好的办法(在一个相同的符号上开启多个EA)。有可能从手柄上分离出来,但在这种情况下,我们必须把它与其他东西连接起来。例如,对EA的输入参数+对它的路径。然而,这种解决方案也有其自身的缺点。 fxsaber 2018.08.25 12:25 #42 prostotrader:在Roboforex,澳元兑新西兰元可以使用Print(GetForexName("AUDNZD")); prostotrader 2018.08.25 12:26 #43 fxsaber:那么,如果EA在有其头寸/订单的时候关闭图表 而被切断了呢? 不太清楚为什么像这样的东西对外汇市场不起作用 因为不清楚应该先放什么 欧元兑美元的基数是欧元,澳元兑纽元 的基数是纽元。 prostotrader 2018.08.25 12:29 #44 //+------------------------------------------------------------------+ //| AutoMagic.mqh | //| Copyright 2017-2018 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ //version "1.01 //#define FORTS //--- struct SYMBOL_MAGIC { long ch_id; ulong magic; }; SYMBOL_MAGIC symb_magic; //-------------------------------------------------------------------+ // Split string function | //+------------------------------------------------------------------+ string SplitString(const string a_str,ulong &a_month,ulong &a_year) { int str_size=StringLen(a_str); int str_tire=StringFind(a_str, "-"); int str_tochka=StringFind(a_str, ".", str_tire); if((str_tire>0) && (str_tochka>0) &&(str_size > 0)) { a_month= ulong(StringToInteger(StringSubstr(a_str,str_tire+1,str_tochka-str_tire-1))); a_year = ulong(StringToInteger(StringSubstr(a_str,str_tochka+1,str_size-str_tochka-1))); if((a_month > 0) && (a_year > 0)) return(StringSubstr(a_str, 0, str_tire)); } return(""); } //-------------------------------------------------------------------+ // Get FOREX symbol function | //+------------------------------------------------------------------+ string GetForexName(const string a_str) { string s_base = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_BASE); string a_prof = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_PROFIT); if(StringLen(s_base) == 3) { int base_pos = StringFind(a_str, s_base, 0); if(base_pos > -1) { switch(base_pos) { case 0: case 1: case 2: return(StringSubstr(a_str, base_pos, 6)); break; default: { string left_str = StringSubstr(a_str, base_pos - 3, 3); string right_str = StringSubstr(a_str, base_pos + 3, 3); if(right_str == "") { return(StringSubstr(a_str, base_pos - 3, 6)); } else if(StringLen(right_str) < 3) { return(StringSubstr(a_str, base_pos - 3, 6)); } else { bool is_match = true; uchar uch_array[]; int result = StringToCharArray(right_str, uch_array, 0, WHOLE_ARRAY, CP_ACP); if(result == 4) { for(int i=0; i < result - 1; i++) { if((uch_array[i] < 65) || (uch_array[i] > 90)) { is_match = false; break; } } if(is_match == true) { return(StringSubstr(a_str, base_pos, 6)); } else { is_match = true; result = StringToCharArray(left_str, uch_array, 0, WHOLE_ARRAY, CP_ACP); if(result == 4) { for(int i=0; i < result - 1; i++) { if((uch_array[i] < 65) || (uch_array[i] > 90)) { is_match = false; break; } } if(is_match == true) { return(StringSubstr(a_str, base_pos - 3, 6)); } } } } } } break; } } } return(""); } //-------------------------------------------------------------------+ // Get Magic function | //+------------------------------------------------------------------+ ulong GetMagic(const string a_symbol) { //--- Get ChartID symb_magic.ch_id = ChartID(); //--- if(SymbolSelect(Symbol(), true) == false) { Print(__FUNCTION__, ": Нет такого символа!"); return(0); } #ifdef FORTS //--- Test symdol if(StringLen(a_symbol)>10) { Print(__FUNCTION__, ": Не правильный символ!"); return(0); } if(symb_magic.ch_id != 0) { ulong month = 0; ulong year = 0; string new_str=SplitString(a_symbol,month,year); if(StringLen(new_str)>0) { symb_magic.magic = 0; uchar char_array[]; int result=StringToCharArray(new_str,char_array,0,WHOLE_ARRAY,CP_ACP); if(result>0) { ulong value; for(int i = 0; i < result - 1; i++) { value=ulong(char_array[i]); value<<=(56 -(i*8)); symb_magic.magic += value; } month<<=24; symb_magic.magic += month; year<<=16; symb_magic.magic += year; ulong a_chid = ulong(symb_magic.ch_id); a_chid<<=16; return(symb_magic.magic&=symb_magic.ch_id); } } } #else string in_str = GetForexName(a_symbol); if(in_str != "") { Print("in_str = ", in_str); symb_magic.magic = 0; uchar char_array[]; int result=StringToCharArray(a_symbol,char_array,0,WHOLE_ARRAY,CP_ACP); if(result>0) { ulong value; for(int i = 0; i < 6; i++) { value=ulong(char_array[i]); value<<=(56 -(i*8)); symb_magic.magic += value; } ulong a_chid = ulong(symb_magic.ch_id); a_chid<<=16; return(symb_magic.magic&=symb_magic.ch_id); } } #endif return(0); } //-------------------------------------------------------------------+ // Is my magic function | //+------------------------------------------------------------------+ bool IsMyMagic(const ulong m_magic, const long chart_id) { if(symb_magic.ch_id == chart_id) { ulong stored_magic=symb_magic.magic; stored_magic>>=16; ulong in_magic = m_magic; in_magic>>=16; if(in_magic == stored_magic) return(true); } return(false); } //+------------------------------------------------------------------+ 2018.08.25 15:29:02.174 Magic_test (AUDNZD,M1) in_str = AUDNZD 2018.08.25 15:29:02.384 Magic_test (AUDNZD,M1) FOREX done. int OnInit() { ulong a_magic = GetMagic(Symbol()); if(a_magic != 0) { a_magic+=25; if(IsMyMagic(a_magic, ChartID()) == true) { Print("FOREX done."); } } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } prostotrader 2018.08.25 12:37 #45 有一种方法可以将Magik存储在TERMINAL全局变量 中,那么就不会有任何损失。 我现在就写。 Vitaly Muzichenko 2018.08.25 12:46 #46 prostotrader:有一种方法可以将Magik存储在TERMINAL全局变量 中,那么就不会有任何损失。 我把它写下来。当它崩溃的时候,它就会被杀死。 fxsaber 2018.08.25 12:47 #47 prostotrader:因为不清楚应该先放什么 欧元兑美元的基数是欧元,澳元兑纽元 的基数是纽元。始终如一 关于交易、自动交易系统和交易策略测试的论坛 外汇交易中符号名称的最大长度 fxsaber, 2018.08.25 14:12 string GetForexName( const string Symb ) { return(SymbolIsExist(Symb) ? SymbolInfoString(Symb, SYMBOL_CURRENCY_BASE) + SymbolInfoString(Symb, SYMBOL_CURRENCY_PROFIT) : NULL); } 你在编造一个叫 "不是通用哈希函数 "的自行车。下面是一个简单的变体,其功能与你的相同 #include <crc64.mqh> // https://www.mql5.com/en/blogs/post/683577 string GetMagicString() { return(MQLInfoString(MQL_PROGRAM_PATH/*MQL_PROGRAM_NAME*/) + _Symbol + (string)ChartID()/* + (string)_Period*/); } ulong GetMagic() { uchar Bytes[]; return(crc64(0, Bytes, StringToCharArray(GetMagicString(), Bytes))); } void OnStart() { Print(GetMagic()); } prostotrader 2018.08.25 13:00 #48 fxsaber:它总是这样。 你在编造一个叫 "不是通用哈希函数 "的自行车。下面是一个简单的变体,其功能与你的相同 最后两个字节是为本图表中的其他魔术师保留的 但我忘了CRC,它是在MQL中 :) 谢谢那么就根本不会有任何问题。 fxsaber: 谢谢 prostotrader 2018.08.25 13:04 #49 Vitaly Muzichenko:当它崩溃时,它就会被杀死。这就是创建全局 终端变量的原因,这样它们就不会被 "杀死"。 prostotrader 2018.08.25 13:09 #50 fxsaber:它总是这样。 你在编造一个叫 "不是通用哈希函数 "的自行车。下面是一个简单的变体,其功能与你的相同 你的变体不会起作用,因为你可以在同一个符号上运行同一个EA。 123456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果有一个头寸,所有的数据可以在图表关闭时 被检索出来,这个符号上的挂单可以简单地被 "钉死"。
拿它来做什么?你的变体的严重缺点是对图表手柄的约束。
没有人想到一个更好的办法(在一个相同的符号上开启多个EA)。
有可能从手柄上分离出来,但在这种情况下,我们必须把它与其他东西连接起来。例如,对EA的输入参数+对它的路径。然而,这种解决方案也有其自身的缺点。
在Roboforex,澳元兑新西兰元可以使用
那么,如果EA在有其头寸/订单的时候关闭图表 而被切断了呢?
不太清楚为什么像这样的东西对外汇市场不起作用
因为不清楚应该先放什么
欧元兑美元的基数是欧元,澳元兑纽元 的基数是纽元。
有一种方法可以将Magik存储在TERMINAL全局变量 中,那么就不会有任何损失。
我现在就写。
有一种方法可以将Magik存储在TERMINAL全局变量 中,那么就不会有任何损失。
我把它写下来。
当它崩溃的时候,它就会被杀死。
因为不清楚应该先放什么
欧元兑美元的基数是欧元,澳元兑纽元 的基数是纽元。
始终如一
关于交易、自动交易系统和交易策略测试的论坛
外汇交易中符号名称的最大长度
fxsaber, 2018.08.25 14:12
你在编造一个叫 "不是通用哈希函数 "的自行车。下面是一个简单的变体,其功能与你的相同
它总是这样。
你在编造一个叫 "不是通用哈希函数 "的自行车。下面是一个简单的变体,其功能与你的相同
最后两个字节是为本图表中的其他魔术师保留的
但我忘了CRC,它是在MQL中 :) 谢谢
那么就根本不会有任何问题。
fxsaber: 谢谢
当它崩溃时,它就会被杀死。
这就是创建全局 终端变量的原因,这样它们就不会被 "杀死"。
它总是这样。
你在编造一个叫 "不是通用哈希函数 "的自行车。下面是一个简单的变体,其功能与你的相同
你的变体不会起作用,因为你可以在同一个符号上运行同一个EA。