FOREX에서 기호 이름의 최대 길이 - 페이지 5 123456789101112 새 코멘트 fxsaber 2018.08.25 12:24 #41 prostotrader : 위치가 있는 경우 차트가 닫힐 때 모든 데이터를 얻을 수 있으며 이 기호에 대한 보류 중인 주문은 간단히 "못을 박을" 수 있습니다. 왜 얻을? 변형의 심각한 단점은 차트 핸들에 대한 바인딩이 있다는 것입니다. 더 나은, 지금까지 아무도 제안하지 않았습니다(동일한 기호에 대해 여러 고문을 여는 경우). 핸들을 제거할 수 있지만 다른 것에 연결해야 합니다. 예를 들어, 어드바이저의 입력 매개변수 + 그에 대한 경로. 그러나 이 솔루션에는 단점도 있습니다. fxsaber 2018.08.25 12:25 #42 prostotrader : Roboforex AUDNZD에서 근무 Print (GetForexName( "AUDNZD" )); prostotrader 2018.08.25 12:26 #43 fxsaber : 그렇다면 어드바이저가 차단되어 포지션/오더가 있는 순간 차트를 닫는다면 ? Forex에서 이와 같은 것이 작동하지 않는 이유를 잘 이해하지 못했습니다. 무엇을 먼저 해야할지 명확하지 않기 때문에 EURUSD - 기본 - EUR 및 AUDNZD - 기본 NZD 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 TERMINAL의 전역 변수에 마법을 저장하는 방법이 있습니다. 그러면 아무 것도 손실되지 않습니다. 지금 바로 쓰겠습니다 Vitaly Muzichenko 2018.08.25 12:46 #46 prostotrader : TERMINAL의 전역 변수에 마법을 저장하는 방법이 있습니다. 그러면 아무 것도 손실되지 않습니다. 지금 바로 쓰겠습니다 충돌하면 죽습니다. fxsaber 2018.08.25 12:47 #47 prostotrader : 무엇을 먼저 해야할지 명확하지 않기 때문에 EURUSD - 기본 - EUR 및 AUDNZD - 기본 NZD 언제나처럼 거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼 FOREX에서 기호 이름의 최대 길이 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 : 언제나처럼 "비범용 해시 함수"라는 자전거를 생각해 냈습니다. 다음은 귀하와 동일한 기능을 가진 간단한 버전입니다. 마지막 두 바이트는 이 차트의 추가 마술사를 위해 예약되어 있습니다. 그러나 나는 그것이 MQL에 있다는 CRC에 대해 잊어 버렸습니다 :) 감사합니다. 그러면 전혀 문제가 없을 것입니다. fxsaber : 감사합니다 prostotrader 2018.08.25 13:04 #49 Vitaly Muzichenko : 충돌하면 죽습니다. 터미널 의 전역 변수는 "죽지 않도록" 생성됩니다. prostotrader 2018.08.25 13:09 #50 fxsaber : 언제나처럼 "비범용 해시 함수"라는 자전거를 생각해 냈습니다. 다음은 귀하와 동일한 기능을 가진 간단한 버전입니다. 동일한 기호에서 동일한 어드바이저를 실행할 수 있으므로 옵션이 작동하지 않습니다. 123456789101112 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
위치가 있는 경우 차트가 닫힐 때 모든 데이터를 얻을 수 있으며 이 기호에 대한 보류 중인 주문은 간단히 "못을 박을" 수 있습니다.
왜 얻을? 변형의 심각한 단점은 차트 핸들에 대한 바인딩이 있다는 것입니다.
더 나은, 지금까지 아무도 제안하지 않았습니다(동일한 기호에 대해 여러 고문을 여는 경우).
핸들을 제거할 수 있지만 다른 것에 연결해야 합니다. 예를 들어, 어드바이저의 입력 매개변수 + 그에 대한 경로. 그러나 이 솔루션에는 단점도 있습니다.
Roboforex AUDNZD에서 근무
그렇다면 어드바이저가 차단되어 포지션/오더가 있는 순간 차트를 닫는다면 ?
Forex에서 이와 같은 것이 작동하지 않는 이유를 잘 이해하지 못했습니다.
무엇을 먼저 해야할지 명확하지 않기 때문에
EURUSD - 기본 - EUR 및 AUDNZD - 기본 NZD
TERMINAL의 전역 변수에 마법을 저장하는 방법이 있습니다. 그러면 아무 것도 손실되지 않습니다.
지금 바로 쓰겠습니다
TERMINAL의 전역 변수에 마법을 저장하는 방법이 있습니다. 그러면 아무 것도 손실되지 않습니다.
지금 바로 쓰겠습니다
충돌하면 죽습니다.
무엇을 먼저 해야할지 명확하지 않기 때문에
EURUSD - 기본 - EUR 및 AUDNZD - 기본 NZD
언제나처럼
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
FOREX에서 기호 이름의 최대 길이
fxsaber , 2018.08.25 14:12
"비범용 해시 함수"라는 자전거를 생각해 냈습니다. 다음은 귀하와 동일한 기능을 가진 간단한 버전입니다.
언제나처럼
"비범용 해시 함수"라는 자전거를 생각해 냈습니다. 다음은 귀하와 동일한 기능을 가진 간단한 버전입니다.
마지막 두 바이트는 이 차트의 추가 마술사를 위해 예약되어 있습니다.
그러나 나는 그것이 MQL에 있다는 CRC에 대해 잊어 버렸습니다 :) 감사합니다.
그러면 전혀 문제가 없을 것입니다.
fxsaber : 감사합니다
충돌하면 죽습니다.
터미널 의 전역 변수는 "죽지 않도록" 생성됩니다.
언제나처럼
"비범용 해시 함수"라는 자전거를 생각해 냈습니다. 다음은 귀하와 동일한 기능을 가진 간단한 버전입니다.
동일한 기호에서 동일한 어드바이저를 실행할 수 있으므로 옵션이 작동하지 않습니다.