Максисальная длина названия символа на FOREX - страница 4 123456789101112 Новый комментарий prostotrader 2018.08.24 15:50 #31 Теперь, можно пользоваться и на ФОРЕКС (берёт любые "кривые" символы даже такие как _BTCUSD_i ) //+------------------------------------------------------------------+ //| 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); 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 != "") { 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); } //+------------------------------------------------------------------+ Slava 2018.08.25 12:06 #32 prostotrader: Теперь, можно пользоваться и на ФОРЕКС (берёт любые "кривые" символы даже такие как _BTCUSD_i ) В кодобазу fxsaber 2018.08.25 12:29 #33 prostotrader: Давно написал подключаемый файл для автоматического получения MagicВ чем состояла задача? проверьте пожалуйста появляется ли сообщение "FOREX done." на "кривых" символахНе появляется на "EURUSD". Базовый символ всегда стоит первым в паре?У кастомных символов может быть все, что угодно. Наверное, на кастомных запускать такие проверки удобнее всего. ЗЫ Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий Библиотеки: AutoMagic Dmitry Fedoseev, 2017.02.03 13:31 Использования хэндла графика для формирования магика означает, что в случае случайного закрытия графика, ордера будут потеряны. Библиотеки: AutoMagic Как увеличить размер массива[] Библиотеки: Virtual prostotrader 2018.08.25 13:51 #34 fxsaber: Не появляется на "EURUSD". ЗЫ Поправил Добавлено на ЗЫ Напишите что-то лучшее fxsaber 2018.08.25 13:58 #35 prostotrader: ПоправилТеперь работает. Теперь бы услышать несколько слов о практической стороне дела. ЗЫ "AUDNZD"... prostotrader 2018.08.25 14:06 #36 fxsaber: Теперь работает. Теперь бы услышать несколько слов о практической стороне дела. ЗЫ "AUDNZD"...Автоматически создаёт для советника на графике уникальный Магик с возможностью использовать 65535 дополнительных магиковДабавлено У меня нет ФОРЕКС Я писал функцию GetForexName без проверки fxsaber 2018.08.25 14:12 #37 prostotrader: Автоматически создаёт для советника на графике уникальный Магик с возможностью использовать 65535 дополнительных магиковТак а что делать, если советник отрубили, закрыв чарт в момент, когда есть его позиции/ордера? Не совсем понял, почему нечто подобное не прокатило для Forex bool SymbolIsExist( const string Symb = NULL ) { ResetLastError(); SymbolInfoInteger((Symb == NULL) ? _Symbol : Symb, SYMBOL_CUSTOM); return(::GetLastError() != ERR_MARKET_UNKNOWN_SYMBOL); } string GetForexName( const string Symb ) { return(SymbolIsExist(Symb) ? SymbolInfoString(Symb, SYMBOL_CURRENCY_BASE) + SymbolInfoString(Symb, SYMBOL_CURRENCY_PROFIT) : NULL); } void OnStart() { Print(GetForexName(_Symbol)); } fxsaber 2018.08.25 14:16 #38 prostotrader: У меня нет ФОРЕКССделайте - MQ-Demo. prostotrader 2018.08.25 14:17 #39 fxsaber: Так а что делать, если советник отрубили, закрыв чарт в момент, когда есть его позиции/ордера? Если есть позиция, то все данные можно получить, при закрытии чарта, а отложенные ордера по этому символу просто "прибить". Лучше, пока, никто не придумал (для открытия нескольких советников на одном и том же символе) [Архив!] Любой вопрос новичка, Можно ли запустить 2-ух Торговая платформа MetaTrader 5 prostotrader 2018.08.25 14:20 #40 fxsaber: ЗЫ "AUDNZD"...На Roboforex AUDNZD работает 123456789101112 Новый комментарий
Теперь, можно пользоваться и на ФОРЕКС (берёт любые "кривые" символы даже такие как _BTCUSD_i )
Теперь, можно пользоваться и на ФОРЕКС (берёт любые "кривые" символы даже такие как _BTCUSD_i )
В кодобазу
Давно написал подключаемый файл для автоматического получения Magic
В чем состояла задача?
Не появляется на "EURUSD".
Базовый символ всегда стоит первым в паре?
У кастомных символов может быть все, что угодно. Наверное, на кастомных запускать такие проверки удобнее всего.
ЗЫ
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: AutoMagic
Dmitry Fedoseev, 2017.02.03 13:31
Использования хэндла графика для формирования магика означает, что в случае случайного закрытия графика, ордера будут потеряны.
Не появляется на "EURUSD".
ЗЫ
Поправил
Добавлено на ЗЫ
Напишите что-то лучшее
Поправил
Теперь работает. Теперь бы услышать несколько слов о практической стороне дела.
ЗЫ "AUDNZD"...
Теперь работает. Теперь бы услышать несколько слов о практической стороне дела.
ЗЫ "AUDNZD"...
Автоматически создаёт для советника на графике уникальный Магик с возможностью использовать 65535 дополнительных магиков
Дабавлено
У меня нет ФОРЕКС
Я писал функцию GetForexName без проверки
Автоматически создаёт для советника на графике уникальный Магик с возможностью использовать 65535 дополнительных магиков
Так а что делать, если советник отрубили, закрыв чарт в момент, когда есть его позиции/ордера?
Не совсем понял, почему нечто подобное не прокатило для Forex
У меня нет ФОРЕКС
Сделайте - MQ-Demo.
Так а что делать, если советник отрубили, закрыв чарт в момент, когда есть его позиции/ордера?
Если есть позиция, то все данные можно получить, при закрытии чарта, а отложенные ордера по этому символу просто "прибить".
Лучше, пока, никто не придумал (для открытия нескольких советников на одном и том же символе)
ЗЫ "AUDNZD"...
На Roboforex AUDNZD работает