하루에 1440개의 주문이 있는 경우 1분의 시작 또는 더 간단하게는 분 표시줄의 모양에 대한 확인이 있어야 합니다. 그리고 이 순간에 열립니다. 당신은 그것을 가지고 있지 않으므로 고문은 현재 견적에서 우리 기호의 조건에 따라 그 자체로 힘든 조건인 각 틱에 대한 포지션을 엽니다. 이 조건은 충족되거나 충족되지 않을 수 있으며 틱은 건너뜁니다. 그리고 어느 시점에서 치명적인 오류가 발생합니다.
2020.10.27 10:25:17.548코어 136Mb의 히스토리 데이터, 64Mb의 틱 데이터를 포함하여 272Mb 메모리 사용
inputint StopLoss= 30 ; // Stop Lossinputint TakeProfit= 100 ; // Take Profitinputdouble Lot= 0.1 ; // Количество лотов для торговлиint A; ////+------------------------------------------------------------------+voidOnTick ()
{
//Print( "====================================================", TimeCurrent() ) ;//--- Объявляем структуры, которые будут использоваться для торговлиMqlTick latest_price; // Будет использоваться для текущих котировокMqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросовMqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросовMqlDateTime time_now;// Будет использоваться дляTimeCurrent (time_now); if (! SymbolInfoTick ( _Symbol ,latest_price))
if (time_now.hour== 10&&time_now.min== 0 )
{
mrequest.action = TRADE_ACTION_DEAL ; // немедленное исполнение
mrequest.price = NormalizeDouble (latest_price.bid, _Digits ); // последняя цена Bid
mrequest.sl = NormalizeDouble (latest_price.ask + StopLoss* _Point , _Digits ); // Stop Loss
mrequest.tp = NormalizeDouble (latest_price.ask - TakeProfit* _Point , _Digits ); // Take Profit
mrequest.symbol = _Symbol ; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.type= ORDER_TYPE_SELL ; // ордер на продажу
mrequest.type_filling = ORDER_FILLING _RETURN ; // тип исполнения ордера - все или ничего
mrequest.deviation= 100 ; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend (mrequest,mresult);
}
return ;
}
어드바이저를 시작하는 순간 모든 것이 제대로 작동하지만 시간이 흐르고 현재 분의 새 값이 변수에 입력되지 않습니다.
저것들. 내 조언자는 변수 int M = TimeMinute(TimeCurrent())에 의해 수신된 숫자에 따라 작동합니다.
실제로 코드 라인은 참고서에서 가져온 것이며 작동하지도 않습니다.
예를 들어 12분 만에 실행 - 현재 시간 서버에서 반환된 시간은 변수의 시간에 해당하며 시계에서는 이미 15-20분이지만 변수는 12로 유지됩니다.
코드는 완전히 더 낫습니다. 또는 오히려 함수를 생성한 위치와 함수(OnInit, OnTick, OnTime)에서 분 값을 얻고 인쇄 함수를 호출하는 위치입니다. OnInit에 있거나 터미널 기능의 필드 외부에 있으면 그렇게 되어야 합니다. OnTik에 있는 경우 각 틱마다 새 분으로 값을 인쇄하고 업데이트합니다.
코드는 완전히 더 낫습니다. 또는 오히려 함수를 생성한 위치와 함수(OnInit, OnTick, OnTime)에서 분 값을 얻고 인쇄 함수를 호출하는 위치입니다. OnInit에 있거나 터미널 기능의 필드 외부에 있으면 그렇게 되어야 합니다. OnTick에 있으면 각 틱에 인쇄하고 새 분으로 값을 업데이트합니다.
int M = TimeMinute( TimeCurrent ());
bool TimeServer()
{
Print (M, " - Tекущее время сервера" );
if ((M > 55 || M == 55 ) && (M < 59 || M == 59 ))
{
return ( true );
}
else
{
return ( false );
}
}
글쎄, 여기에 코드가 완전히 있습니다. 그게 전부입니다. void OnTick() 함수에서는 실행될 첫 번째 줄로 맨 처음에 시작됩니다.
차트/삭제 필드/ 에 대한 재컴파일 또는 첨부의 순간에만 발생합니다. 나머지 시간 동안 변수 M은 EA가 처음 실행되었을 때 받은 분 값을 유지합니다.
하루에 1440개의 주문이 있는 경우 1분의 시작 또는 더 간단하게는 분 표시줄의 모양에 대한 확인이 있어야 합니다. 그리고 이 순간에 열립니다. 당신은 그것을 가지고 있지 않으므로 고문은 현재 견적에서 우리 기호의 조건에 따라 그 자체로 힘든 조건인 각 틱에 대한 포지션을 엽니다. 이 조건은 충족되거나 충족되지 않을 수 있으며 틱은 건너뜁니다. 그리고 어느 시점에서 치명적인 오류가 발생합니다.
또한, 주문 실행 의 유형(주문을 체결하여 포지션을 생성) All or nothing.
이해했다. 도와 주셔서 감사합니다.
어드바이저가 이렇게 많은 주문을 여는 것은 어렵다는 생각이 문득 들었다. 이 코드로 주문 수를 제한하려고 했습니다.
즉, 10:00에만 주문을 엽니다. 그러나 결과는 동일합니다.
2020.10.27 10:25:17.548 코어 1 36Mb의 히스토리 데이터, 64Mb의 틱 데이터를 포함하여 272Mb 메모리 사용
내가 무엇을 잘못하고 있지?
내가 추가하고 변경한 코드를 강조 표시
다음은 로그 파일에 기록된 내용입니다.
FD 0 10:57:05.453 코어 1 에이전트 프로세스가 127.0.0.1:3000에 시작되었습니다.
CS 0 10:57:05.453 코어 1 127.0.0.1:3000에 연결
JD 0 10:57:05.953 코어 1 연결된
외경 0 10:57:05.975 코어 1 승인됨(에이전트 빌드 2650)
제이엘 0 10:57:05.980 시험 장치 EURUSD,M1(Alpari-MT5-Demo): Experts\GRAIL.ex5 테스트 2020.09.01 00:00 ~ 2020.09.10 00:00
켜짐 0 10:57:05.997 코어 1 공통 동기화 완료
CJ 0 10:57:06.223 시험 장치 분석된 이력의 품질은 100%입니다.
LM 0 10:57:06.248 코어 1 MetaTester 5는 127.0.0.1:3000에 시작되었습니다.
EJ 0 10:57:06.248 코어 1 초기화 완료
엘에스 0 10:57:06.248 코어 1 로그인(빌드 2650)
코 0 10:57:06.248 코어 1 4372바이트의 계정 정보가 로드됨
리 0 10:57:06.248 코어 1 1482바이트의 테스터 매개변수 로드됨
에프엔 0 10:57:06.248 코어 1 1724바이트의 입력 매개변수 로드됨
확인 0 10:57:06.248 코어 1 423바이트의 기호 목록 로드(72개 기호)
호 0 10:57:06.248 코어 1 전문가 파일 추가됨: Experts\GRAIL.ex5. 13680바이트 로드됨
CP 0 10:57:06.248 코어 1 4077Mb 사용 가능, 틱 생성을 위해 50블록 설정
디 0 10:57:06.248 코어 1 핍으로 이익 계산, 초기 예치금 10000, 레버리지 1:100
LP 0 10:57:06.248 코어 1 성공적으로 초기화
R.I. 0 10:57:06.248 코어 1 15Kb의 총 초기화 데이터 수신
DN 0 10:57:06.248 코어 1 인텔 코어 i5-6400 @ 2.70GHz, 7883MB
IG 0 10:57:06.248 코어 1 EURUSD: 동기화할 기호
RS 0 10:57:06.248 코어 1 EURUSD: 동기화된 기호, 3720바이트의 기호 정보 수신됨
올 0 10:57:06.248 코어 1 EURUSD: 0:00:00.003에 동기화할 기록 데이터 27바이트 로드
EK 0 10:57:06.248 코어 1 EURUSD: 2019.01.02에서 2020.10.23까지 동기화된 기록
LK 0 10:57:06.248 코어 1 EURUSD,M1: 628432개의 막대에 할당된 기록 캐시 및 2019.01.02 06:00에서 2020.08.31 23:59까지 막대 619175개 포함
엘에이치 0 10:57:06.248 코어 1 EURUSD,M1: 역사는 2019.01.02 06:00부터 시작됩니다
LN 0 10:57:06.248 코어 1 EURUSD,M1(Alpari-MT5-Demo): OHLC 막대 상태 생성. 막대 시작에서만 실행되는 OnTick
제이엠 0 10:57:06.248 코어 1 EURUSD,M1: 2020.09.01 00:00부터 2020.09.10 00:00까지 Experts\GRAIL.ex5 테스트 시작: 입력:
엘에스 0 10:57:06.248 코어 1 손절매=30
PL 0 10:57:06.248 코어 1 테이크프로핏=100
FJ 0 10:57:06.248 코어 1 로트=0.1
디피 0 10:57:06.248 코어 1 최종 잔액 10000.00핍
EE 0 10:57:06.248 코어 1 EURUSD,M1: 39553틱, 10068바가 생성되었습니다. 환경이 0:00:00.031에 동기화되었습니다. 0:00:00.247에 테스트를 통과했습니다(0:00:00.016을 사전 처리하는 틱 포함).
드 0 10:57:06.248 코어 1 EURUSD,M1: 로그인부터 테스트 중지까지의 총 시간 0:00:00.278(이력 데이터 동기화를 위한 0:00:00.031 포함)
NQ 0 10:57:06.248 코어 1 36Mb의 히스토리 데이터, 64Mb의 틱 데이터를 포함하여 272Mb 메모리 사용
케 0 10:57:06.248 코어 1 "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" 로그 파일 작성
OS 0 10:57:06.260 코어 1 연결 닫힘
말해주세요!
새 틱이 도착할 때 서버 시간이 업데이트되지 않는 이유는 무엇입니까?
어드바이저를 시작하는 순간 모든 것이 제대로 작동하지만 시간이 흐르고 현재 분의 새 값이 변수에 입력되지 않습니다.
저것들. 내 조언자는 변수 int M = TimeMinute(TimeCurrent())에 의해 수신된 숫자에 따라 작동합니다.
실제로 코드 라인은 참고서에서 가져온 것이며 작동하지도 않습니다.
예를 들어 12분 만에 실행 - 현재 시간 서버에서 반환된 시간은 변수의 시간에 해당하며 시계에서는 이미 15-20분이지만 변수는 12로 유지됩니다.
코드는 완전히 더 낫습니다. 또는 오히려 함수를 생성한 위치와 함수(OnInit, OnTick, OnTime)에서 분 값을 얻고 인쇄 함수를 호출하는 위치입니다. OnInit에 있거나 터미널 기능의 필드 외부에 있으면 그렇게 되어야 합니다. OnTik에 있는 경우 각 틱마다 새 분으로 값을 인쇄하고 업데이트합니다.
발레리 야스트렘스키 :
코드는 완전히 더 낫습니다. 또는 오히려 함수를 생성한 위치와 함수(OnInit, OnTick, OnTime)에서 분 값을 얻고 인쇄 함수를 호출하는 위치입니다. OnInit에 있거나 터미널 기능의 필드 외부에 있으면 그렇게 되어야 합니다. OnTick에 있으면 각 틱에 인쇄하고 새 분으로 값을 업데이트합니다.
글쎄, 여기에 코드가 완전히 있습니다. 그게 전부입니다. void OnTick() 함수에서는 실행될 첫 번째 줄로 맨 처음에 시작됩니다.
차트/삭제 필드/ 에 대한 재컴파일 또는 첨부의 순간에만 발생합니다. 나머지 시간 동안 변수 M은 EA가 처음 실행되었을 때 받은 분 값을 유지합니다.
글쎄, 여기에 코드가 완전히 있습니다. 그게 전부입니다. void OnTick() 함수에서는 실행될 첫 번째 줄로 맨 처음에 시작됩니다.
차트/삭제 필드/ 에 대한 재컴파일 또는 첨부의 순간에만 발생합니다. 나머지 시간 동안 변수 M은 EA가 처음 실행되었을 때 받은 분 값을 유지합니다.
이해했습니다 감사합니다!
할 필요가 있었다
함수 본문에 넣고 그 앞에 값을 할당하지 않고 M 값을 할당합니다.
이해했습니다 감사합니다!
할 필요가 있었다
함수 본문에 넣고 그 앞에 값을 할당하지 않고 M 값을 할당합니다.
다양한 방법으로 가능합니다. 전역 및 지역 변수와 해당 가시성을 읽습니다.
안녕하세요. 각도에서 추세선의 각도를 얻으려고합니다. 코드는 다음과 같습니다.
angle은 항상 0입니다. 표준 라이브러리 메서드를 사용할지 내장 함수를 사용할지 여부. 이 경우 선이 그려집니다. 뭐가 문제 야? 각도를 얻는 방법?
안녕하세요. 각도에서 추세선의 각도를 얻으려고합니다. 코드는 다음과 같습니다.
angle은 항상 0입니다. 표준 라이브러리 메서드를 사용할지 내장 함수를 사용할지 여부. 이 경우 선이 그려집니다. 뭐가 문제 야? 각도를 얻는 방법?
https://www.mql5.com/ru/forum/103591
물론입니다. 하지만 각도를 어떻게 계산합니까?
https://www.mql5.com/ru/forum/103591
물론입니다. 하지만 각도를 어떻게 계산합니까?
글쎄, 당신은 코미디언입니다.
내가 여기서 누구를 십자가에 못 박고 있습니까?
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론
니콜라이 셈코 , 2020.10.26 00:34
왜 속도를 두려워합니까? 이것은 유형 캐스팅에 대한 규칙일 뿐입니다.
각도 감지 기능의 변형:
MT5 이후에는 MT4로 작업하는 느낌이 끔찍합니다. 역사에 대한 접근은 어떻게든 거세되었습니다. 나는 진드기에 대해서도 침묵을 지킨다.
표시기에서 그러한 글꼴을 선택할 수 있는지 알려주실 수 있습니까?