답변 감사합니다, Igor는 이해했습니다. 여러분의 기능도 따로 사용하지만, 전문가를 키우는 단계에서 라이브러리를 활용하고 싶었습니다.
komposter 의 trade_lib&info_lib 를 보고 내 자신의 사용을 위해 일부 변경했습니다.
1. 모든 라이브러리에서 #property 라이브러리 를 제거하고 라이브러리의 #include 교차 링크를 혼동하지 않도록 라이브러리 이름을 변경했습니다.
2. 모든 라이브러리의 직접 호출 블록을 EA에 삽입했습니다.
#include <b-Positions#.mqh> // Библиотека функций для работы с позициями #include <b-KimIV#.mqh> // Библиотека дополнительных функций#include <b-Orders#.mqh> // Библиотека функций для работы с ордерами#include <stdlib.mqh> // Стандартная библиотека#include <WinUser32.mqh> // Стандартная библиотека
이제 모든 라이브러리의 모든 기능을 사용할 수 있으며 정상적인 "참조되지 않음.."을 제외하고 컴파일할 때 오류 및 범죄 메시지가 없습니다.
이 함수는 날짜가 지정된 월의 주 번호를 반환합니다. 하나의 선택적 매개변수만 사용합니다.
dt - 날짜, 시간. 기본값 - 0 - 거래 서버의 현재 날짜 및 시간.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.08.2008 |//| Описание : Возвращает номер недели месяца по дате |//+----------------------------------------------------------------------------+//| Параметры: |//| dt - дата, время (0 - сейчас по времени торгового сервера) |//+----------------------------------------------------------------------------+int WeekOfMonth (datetime dt =0){if( dt <=0) dt =TimeCurrent();datetime d ;int i , kd =TimeDay( dt ), nn =1;for( i =2; i <= kd ; i ++){
d =StrToTime(TimeYear( dt )+"."+TimeMonth( dt )+"."+ i );if(TimeDayOfWeek( d )==1) nn ++;}return( nn );}
안녕, 이고르! 당신의 유용한 기능에 대해 대단히 감사합니다! 최대한 빨리 사용하고 있습니다! 나는 최근에 이것에 도취되어 당신을위한 질문 ... 어제 인터넷이 주기적으로 쏟아졌습니다. 그 후 내 고문은 일하고 싶지 않습니다 젠장 ... 그는 만족스러운 얼굴 대신 십자가를 넣습니다! 나는 당신의 OpenPosition 기능을 사용합니다. 아마도 그는 어떤 스레드에서 처리한 오류에 반응했을 것입니까? 다음은 어제의 로그입니다. 그 전에는 모든 것이 정상이었습니다! 데모계정으로 테스트중인데.. 220오류 는 어디에도 안나오네요...........
07:47:28 MetaTrader 4.00 빌드 220 시작(MetaQuotes Software Corp.) 07:47:28 전문가 공개 확률 USDJPY EURUSD,M1: 성공적으로 로드됨 07:47:32 '1262868': 로그인 07:47:44 '1262868': 로그인 07:49:40 '1262868': 로그인 07:49:46 '1262868': 로그인 07:54:44 '1262868': 연결 실패 [연결 없음] 11:38:16 전문가 공개 확률 USDJPY EURUSD,M1: 제거됨 11:38:18 MetaTrader 4.00 빌드 220 중지됨 14:05:05 MetaTrader 4.00 빌드 220 시작(MetaQuotes Software Corp.) 14:05:05 전문가 열기 확률 USDJPY EURUSD,M1: 성공적으로 로드됨 14:05:10 '1262868': 로그인 14:05:31 '1262868': 로그인 14:06:39 '1262868': 로그인 14:06:46 '1262868': 로그인 15:57:06 '1262868': 연결 실패 [연결 없음] 18:30:46 전문가 공개 확률 USDJPY EURUSD,M5: 제거됨 18:30:49 메인 펌핑: 정지 시 타임아웃 18:30:52 메인 펌핑: 정지 시 타임아웃 18:30:55 메인 펌핑: 정지 시 타임아웃 18:30:58 메인 펌핑: 정지 시 타임아웃 18:31:01 메인 펌핑: 정지 시 타임아웃 18:31:01 메인 펌핑: 종료 18:31:02 MetaTrader 4.00 빌드 220 중지됨 18:31:02 시스템 종료로 인해 MetaTrader 4.00 빌드 220이 중지되었습니다. 18:47:57 MetaTrader 4.00 빌드 220 시작(MetaQuotes Software Corp.) 18:47:58 전문가 공개 확률 USDJPY EURUSD,M5: 성공적으로 로드됨 18:48:01 '1262868': 연결 실패 [연결 없음] 18:48:10 '1262868': 로그인 18:48:20 '1262868': 로그인 20:19:00 '1262868': 로그인 20:19:07 '1262868': 로그인 20:20:05 '1262868': 로그인 20:20:13 '1262868': 로그인 20:59:29 '1262868': 로그인 20:59:39 '1262868': 로그인 21:02:16 '1262868': 로그인 21:02:41 '1262868': DataCenter 연결 실패 [6] 22:08:40 '1262868': 핑 실패 22:08:43 '1262868': 로그인 22:08:49 '1262868': DataCenter 연결 실패 [6] 22:10:01 '1262868': 로그인 22:10:05 '1262868': DataCenter 연결 실패 [6] 22:14:59 '1262868': 로그인 22:15:13 '1262868': 로그인 22:15:22 '1262868': DataCenter 연결 실패 [6] 22:37:16 '1262868': 로그인 22:37:27 '1262868': DataCenter 연결 실패 [6] 22:40:51 '1262868': 로그인 22:41:04 '1262868': DataCenter 연결 실패 [6] 23:17:14 전문가 공개 확률 USDJPY EURUSD,M5: 제거됨 23:17:16 전문가 공개 확률 USDJPY EURUSD,M5: 성공적으로 로드됨 23:25:52 전문가 공개 확률 USDJPY EURUSD,M5: 제거됨 23:25:55 MetaTrader 4.00 빌드 220 중지됨 23:25:59 MetaTrader 4.00 빌드 220 시작(MetaQuotes Software Corp.) 23:26:05 '1262868': 로그인 23:26:05 전문가 공개 확률 USDJPY EURUSD,M5: 성공적으로 로드됨 23:26:15 '1262868': 로그인 23:27:19 '1262868': 로그인 23:27:34 '1262868': 로그인 23:28:20 전문가 공개 확률 USDJPY EURUSD,M5: 제거됨 23:28:25 전문가 공개 확률 USDJPY USDCHF,H4: 성공적으로 로드됨 23:28:33 전문가 공개 확률 USDJPY USDCHF,H4: 제거됨
khorosh писал(а)>> 이고르, 더 많은 로트가 있는 포지션부터 시작해서 모든 포지션을 청산하는 기능이 있나요?
아니 ... 쓴 ...
ClosePosBySortLots() 함수.
이 기능은 로트 크기별로 정렬된 순서로 위치를 마감합니다. 즉, 이 기능을 이용하여 로트 크기의 오름차순 또는 내림차순으로 포지션을 청산할 수 있습니다. ClosePosBySortLots() 함수는 다음과 같은 선택적 매개변수를 허용합니다.
sy - 거래 상품의 이름. "" - 모든 계측기, NULL - 현재 계측기. 기본값은 "" 입니다.
op - 무역 작업 유형. 유효한 값 -1 - 모든 위치, OP_BUY - 매수, OP_SELL - 매도. 기본값은 -1 입니다.
mn - MagicNumber, 거래 작업의 고유 식별자. 기본값은 -1 - 모든 마법입니다.
sd - 로트 크기 정렬 방향. MODE_ASCEND 의 유효한 값은 오름차순, MODE_DESCEND 는 내림차순입니다. 기본값은 MODE_DESCEND 입니다.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 11.12.2008 |//| Описание : Закрытие позиций в порядке сортировки по размерам лотов. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//| sd - Направление сортировки лотов (MODE_ASCEND - возрастание, |//| MODE_DESCEND - убывание) |//+----------------------------------------------------------------------------+void ClosePosBySortLots (string sy ="",int op =-1,int mn =-1,int sd = MODE_DESCEND ){double a [][2];// Массив лотов и тикетовint i , k =OrdersTotal();// Счётчик и количество ордеровint p =0;// Количество позицийif( sy =="0") sy =Symbol();for( i =0; i < k ; i ++){if(OrderSelect( i , SELECT_BY_POS , MODE_TRADES )){if((OrderSymbol()== sy || sy =="")&&( op <0||OrderType()== op )){if(OrderType()==OP_BUY||OrderType()==OP_SELL){if( mn <0||OrderMagicNumber()== mn ){
p ++;ArrayResize( a , p );
a [ p-1 ][0]=OrderLots();
a [ p-1 ][1]=OrderTicket();}}}}}// вдруг позиций нету, тогда и закрывать нечегоif( p >0){ArraySort( a ,WHOLE_ARRAY,0, sd );for( i =0; i < p ; i ++){if(OrderSelect( a [ i ][1], SELECT_BY_TICKET )){// проверим незакрытость на всякий случай,// может какая-то позиция уже закрылась по стопу/тейкуif(OrderCloseTime()==0) ClosePosBySelect ();}}}}
추신. ClosePosBySortLots() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
이 함수는 문자열의 길이가 지정된 값과 같도록 문자열에 선행(왼쪽) 0 "0"을 추가합니다. AddLeadingZero() 함수는 다음 필수 매개변수를 사용합니다.
s - 선행 0을 추가할 문자열입니다.
k - 결과 문자열의 길이 S .
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Добавляет к строке S столько лидирующих нулей "0", |//| : чтобы длина строки S стала равна K. |//+----------------------------------------------------------------------------+//| Параметры: |//| s - строка |//| k - длина строки S |//+----------------------------------------------------------------------------+string AddLeadingZero (string s ,int k ){while(StringLen( s )< k ) s =StringConcatenate("0", s );return( s );}
추신. AddLeadingZero() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
이 함수는 2/3 정수를 시간 형식의 문자열로 변환합니다. 두 개의 숫자가 함수에 전달되면 첫 번째 숫자는 시간으로 사용되고 두 번째 숫자는 분으로 사용됩니다. "HH:MM" 형식의 문자열이 반환됩니다. 숫자가 세 개인 경우 세 번째 숫자는 초 자리에 배치되고 함수는 "HH:MM:SS" 형식 문자열을 반환합니다. toTime() 함수는 다음과 같은 선택적 매개변수를 사용합니다.
h - 시간. 기본값은 0 입니다.
m - 분. 기본값은 0 입니다.
s - 초. 0 - 사용하지 마십시오. 기본값은 0 입니다.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Преобразует два/три целых числа в строку в формате времени |//+----------------------------------------------------------------------------+//| Параметры: |//| h - часы |//| m - минуты |//| s - секунды (0 - не использовать) |//+----------------------------------------------------------------------------+string toTime (int h =0,int m =0,int s =0){string st ="";if( h ==0) st ="00:";else st =StringConcatenate( AddLeadingZero ( h ,2),":");if( m ==0) st =StringConcatenate( st ,"00");else st =StringConcatenate( st , AddLeadingZero ( m ,2));if( s !=0) st =StringConcatenate( st ,":", AddLeadingZero ( s ,2));return( st );}
Prival>> : 죄송합니다. 저는 이고르가 아닙니다. 그러나 아마도 이것이 도움이 될 것입니다.
저도 사과드립니다. 더 정확할거야
//+------------------------------------------------------------------+//| Функция |//+------------------------------------------------------------------+int Sign (double b ,double s ){double var , e ; var =Close[0]; e =0.000001;if( var < b + e && var > b - e )return(1);if( var < s + e && var > s - e )return(-1);return(0);}
답변 감사합니다, Igor는 이해했습니다. 여러분의 기능도 따로 사용하지만, 전문가를 키우는 단계에서 라이브러리를 활용하고 싶었습니다.
komposter 의 trade_lib&info_lib 를 보고 내 자신의 사용을 위해 일부 변경했습니다.
1. 모든 라이브러리에서 #property 라이브러리 를 제거하고 라이브러리의 #include 교차 링크를 혼동하지 않도록 라이브러리 이름을 변경했습니다.
2. 모든 라이브러리의 직접 호출 블록을 EA에 삽입했습니다.
이제 모든 라이브러리의 모든 기능을 사용할 수 있으며 정상적인 "참조되지 않음.."을 제외하고 컴파일할 때 오류 및 범죄 메시지가 없습니다.
모든 외부 고문을 사용할 수 있으며 문제가 없습니다.
더 쓰시면 연결해서 사용하겠습니다. 먼저 총 이익에 대한 후행 함수를 보고 싶습니다.
WeekOfMonth() 함수.
이 함수는 날짜가 지정된 월의 주 번호를 반환합니다. 하나의 선택적 매개변수만 사용합니다.
추신. WeekOfMonth() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
안녕, 이고르! 당신의 유용한 기능에 대해 대단히 감사합니다! 최대한 빨리 사용하고 있습니다! 나는 최근에 이것에 도취되어 당신을위한 질문 ... 어제 인터넷이 주기적으로 쏟아졌습니다. 그 후 내 고문은 일하고 싶지 않습니다 젠장 ... 그는 만족스러운 얼굴 대신 십자가를 넣습니다! 나는 당신의 OpenPosition 기능을 사용합니다. 아마도 그는 어떤 스레드에서 처리한 오류에 반응했을 것입니까? 다음은 어제의 로그입니다. 그 전에는 모든 것이 정상이었습니다! 데모계정으로 테스트중인데.. 220오류 는 어디에도 안나오네요...........
07:47:28 MetaTrader 4.00 빌드 220 시작(MetaQuotes Software Corp.)
07:47:28 전문가 공개 확률 USDJPY EURUSD,M1: 성공적으로 로드됨
07:47:32 '1262868': 로그인
07:47:44 '1262868': 로그인
07:49:40 '1262868': 로그인
07:49:46 '1262868': 로그인
07:54:44 '1262868': 연결 실패 [연결 없음]
11:38:16 전문가 공개 확률 USDJPY EURUSD,M1: 제거됨
11:38:18 MetaTrader 4.00 빌드 220 중지됨
14:05:05 MetaTrader 4.00 빌드 220 시작(MetaQuotes Software Corp.)
14:05:05 전문가 열기 확률 USDJPY EURUSD,M1: 성공적으로 로드됨
14:05:10 '1262868': 로그인
14:05:31 '1262868': 로그인
14:06:39 '1262868': 로그인
14:06:46 '1262868': 로그인
15:57:06 '1262868': 연결 실패 [연결 없음]
18:30:46 전문가 공개 확률 USDJPY EURUSD,M5: 제거됨
18:30:49 메인 펌핑: 정지 시 타임아웃
18:30:52 메인 펌핑: 정지 시 타임아웃
18:30:55 메인 펌핑: 정지 시 타임아웃
18:30:58 메인 펌핑: 정지 시 타임아웃
18:31:01 메인 펌핑: 정지 시 타임아웃
18:31:01 메인 펌핑: 종료
18:31:02 MetaTrader 4.00 빌드 220 중지됨
18:31:02 시스템 종료로 인해 MetaTrader 4.00 빌드 220이 중지되었습니다.
18:47:57 MetaTrader 4.00 빌드 220 시작(MetaQuotes Software Corp.)
18:47:58 전문가 공개 확률 USDJPY EURUSD,M5: 성공적으로 로드됨
18:48:01 '1262868': 연결 실패 [연결 없음]
18:48:10 '1262868': 로그인
18:48:20 '1262868': 로그인
20:19:00 '1262868': 로그인
20:19:07 '1262868': 로그인
20:20:05 '1262868': 로그인
20:20:13 '1262868': 로그인
20:59:29 '1262868': 로그인
20:59:39 '1262868': 로그인
21:02:16 '1262868': 로그인
21:02:41 '1262868': DataCenter 연결 실패 [6]
22:08:40 '1262868': 핑 실패
22:08:43 '1262868': 로그인
22:08:49 '1262868': DataCenter 연결 실패 [6]
22:10:01 '1262868': 로그인
22:10:05 '1262868': DataCenter 연결 실패 [6]
22:14:59 '1262868': 로그인
22:15:13 '1262868': 로그인
22:15:22 '1262868': DataCenter 연결 실패 [6]
22:37:16 '1262868': 로그인
22:37:27 '1262868': DataCenter 연결 실패 [6]
22:40:51 '1262868': 로그인
22:41:04 '1262868': DataCenter 연결 실패 [6]
23:17:14 전문가 공개 확률 USDJPY EURUSD,M5: 제거됨
23:17:16 전문가 공개 확률 USDJPY EURUSD,M5: 성공적으로 로드됨
23:25:52 전문가 공개 확률 USDJPY EURUSD,M5: 제거됨
23:25:55 MetaTrader 4.00 빌드 220 중지됨
23:25:59 MetaTrader 4.00 빌드 220 시작(MetaQuotes Software Corp.)
23:26:05 '1262868': 로그인
23:26:05 전문가 공개 확률 USDJPY EURUSD,M5: 성공적으로 로드됨
23:26:15 '1262868': 로그인
23:27:19 '1262868': 로그인
23:27:34 '1262868': 로그인
23:28:20 전문가 공개 확률 USDJPY EURUSD,M5: 제거됨
23:28:25 전문가 공개 확률 USDJPY USDCHF,H4: 성공적으로 로드됨
23:28:33 전문가 공개 확률 USDJPY USDCHF,H4: 제거됨
미리 대단히 감사합니다!
이고르, 더 많은 로트가 있는 포지션부터 시작해서 모든 포지션을 청산하는 기능이 있나요?
아니 ... 쓴 ...
ClosePosBySortLots() 함수.
이 기능은 로트 크기별로 정렬된 순서로 위치를 마감합니다. 즉, 이 기능을 이용하여 로트 크기의 오름차순 또는 내림차순으로 포지션을 청산할 수 있습니다. ClosePosBySortLots() 함수는 다음과 같은 선택적 매개변수를 허용합니다.
추신. ClosePosBySortLots() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
AddLeadingZero() 함수.
이 함수는 문자열의 길이가 지정된 값과 같도록 문자열에 선행(왼쪽) 0 "0"을 추가합니다. AddLeadingZero() 함수는 다음 필수 매개변수를 사용합니다.
추신. AddLeadingZero() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
toTime() 함수.
이 함수는 2/3 정수를 시간 형식의 문자열로 변환합니다. 두 개의 숫자가 함수에 전달되면 첫 번째 숫자는 시간으로 사용되고 두 번째 숫자는 분으로 사용됩니다. "HH:MM" 형식의 문자열이 반환됩니다. 숫자가 세 개인 경우 세 번째 숫자는 초 자리에 배치되고 함수는 "HH:MM:SS" 형식 문자열을 반환합니다. toTime() 함수는 다음과 같은 선택적 매개변수를 사용합니다.
추신. 첨부 파일은 toTime() 함수를 테스트하기 위한 스크립트입니다.
Igor, 어렵지 않다면 가격이 변수 중 하나와 일치하면 해당 신호를 제공하는 함수, 예를 들어 b=1.2400, s=1.2300이라고 합시다.
b=가격 sig=1이면 s=가격 sig=-1입니다.
무식해서 죄송합니다.)
죄송합니다. 저는 이고르가 아닙니다. 그러나 아마도 이것이 도움이 될 것입니다.
저도 사과드립니다. 더 정확할거야
..저녁까지 가지를 어지럽히지 않도록 글을 지울게..
필요 없음. 가격의 정확한 가치가 일관되게 포착되지 않는다는 생각을 깨워주는 것이 유용할 것입니다.