vitaliy zamkovoy 현재 가격에서 20초 전 가격을 빼고 이후 주문 개시에 대한 특정 상수와 비교하면 전문가 조언에 어떻게 작성할 수 있습니까?
이 코드를 보세요:
//+------------------------------------------------------------------+//| Test.mq5 |//| Copyright 2022, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2022, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"
//ВХОДНОЙ ПАРАМЕТР
inputushort Constanta=50; //Константа//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create timerEventSetTimer(20);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
}
//+------------------------------------------------------------------+
이 시리즈의 각 값이 20초 동안 삭제될 때 현재 가격과 비교할 수 있도록 매초마다 현재 가격을 기억해야 한다는 점을 올바르게 이해했나요?
비교는 연속적으로 이루어져야 합니다.
틱이 균등하게 이동하지 않으면 문제는 알고리즘에 있으며 모든 틱을 확인해야하는 경우 모든 틱을 기억하고 비교해야합니다. 알고리즘에 따라 덜 자주 가능하다면 타이머와 1 초 후에 가격을 기억하고 20 초 후에도 기억하고 비교합니다. 또는 20초 이내에 모든 가격 또는 가격을 기억하고 새로운 틱과 비교해야 합니다. 1초에 1틱이 있을 수 있고, 5초에 1틱이 있을 수 있으며, 1초에 100틱이 있을 수 있습니다. 5초에 1개의 틱이 있을 때와 1초에 100개의 틱이 있을 때 어떻게 행동할지 결정해야 합니다.
틱이 균일하지 않은 경우 문제는 알고리즘에 있으며 모든 틱을 확인해야하는 경우 모든 틱을 기억하고 비교해야합니다. 알고리즘에 따라 빈도를 줄일 수 있다면 타이머를 설정하고 1초 후에 가격을 기억하고 20초 후에도 기억하고 비교합니다. 또는 20초 이내에 모든 가격 또는 가격을 기억하고 새로운 틱과 비교해야 합니다. 1초에 1틱이 있을 수 있고, 5초에 1틱이 있을 수 있으며, 1초에 100틱이 있을 수 있습니다. 5초당 1개의 틱이 있을 때와 1초에 100개의 틱이 있을 때 어떻게 행동할지 결정해야 합니다.
옵션을 선택하는 문제가 아니라 적는 것이 어려운 문제입니다.... 저는 오늘 이 자리에 처음 왔습니다. 저는 완전히 아마추어입니다.
이 코드를 보세요:
안부, 블라디미르.이 코드를 보세요:
안부, 블라디미르.안타깝게도 앞으로 이틀 동안은 확인이 불가능할 것 같지만 양해 부탁드립니다!
감사하지만 이것은 준비된 코드가 아니라 제 생각의 방향일 뿐이라는 점에 유의하시기 바랍니다. 틀릴 수도 있습니다. 확인이 필요합니다. 다른 옵션을 고려할 수 있습니다 - OnTimer를 제거하고 OnTick()에서 동일한 코드를 시도해 보세요. 요컨대, 시도해보세요.
안부, 블라디미르.
현재 가격과 시간을 기록합니다. 각 틱의 현재 시간과 시간을 비교하고, 20초 이상이면 두 번째 가격을 기억하세요. 첫 번째 가격과 두 번째 가격의 차이를 계산합니다. 얻은 결과를 상수와 비교하고 주문을 개시할지 결정합니다.
현재 가격과 시간을 기억하세요. 두 번째 가격을 20초 이상 기억하는 경우 각 틱의 현재 시간과 시간을 비교합니다. 첫 번째 가격과 두 번째 가격의 차이를 계산합니다. 얻은 결과를 상수와 비교하고 주문을 개시할지 결정합니다.
이 시리즈의 각 값이 20초 동안 제거될 때 현재 가격과 비교하기 위해 매초마다 현재 가격을 기억해야 한다는 것을 올바르게 이해했나요?
비교는 연속적으로 이루어져야 합니다.
이 시리즈의 각 값이 20초 동안 삭제될 때 현재 가격과 비교할 수 있도록 매초마다 현재 가격을 기억해야 한다는 점을 올바르게 이해했나요?
비교는 연속적으로 이루어져야 합니다.
틱이 균등하게 이동하지 않으면 문제는 알고리즘에 있으며 모든 틱을 확인해야하는 경우 모든 틱을 기억하고 비교해야합니다. 알고리즘에 따라 덜 자주 가능하다면 타이머와 1 초 후에 가격을 기억하고 20 초 후에도 기억하고 비교합니다. 또는 20초 이내에 모든 가격 또는 가격을 기억하고 새로운 틱과 비교해야 합니다.
1초에 1틱이 있을 수 있고, 5초에 1틱이 있을 수 있으며, 1초에 100틱이 있을 수 있습니다. 5초에 1개의 틱이 있을 때와 1초에 100개의 틱이 있을 때 어떻게 행동할지 결정해야 합니다.
틱이 균일하지 않은 경우 문제는 알고리즘에 있으며 모든 틱을 확인해야하는 경우 모든 틱을 기억하고 비교해야합니다. 알고리즘에 따라 빈도를 줄일 수 있다면 타이머를 설정하고 1초 후에 가격을 기억하고 20초 후에도 기억하고 비교합니다. 또는 20초 이내에 모든 가격 또는 가격을 기억하고 새로운 틱과 비교해야 합니다.
1초에 1틱이 있을 수 있고, 5초에 1틱이 있을 수 있으며, 1초에 100틱이 있을 수 있습니다. 5초당 1개의 틱이 있을 때와 1초에 100개의 틱이 있을 때 어떻게 행동할지 결정해야 합니다.
옵션을 선택하는 문제가 아니라 적는 것이 어려운 문제입니다.... 저는 오늘 이 자리에 처음 왔습니다. 저는 완전히 아마추어입니다.
제 아이디어를 시험해보고 싶어서요...
옵션 선택의 문제가 아니라 적기가 어려운 문제입니다..... 오늘 여기 처음 왔습니다. 완전 아마추어입니다.
제 아이디어를 시험해보고 싶어요.
알고리즘은 정확해야 하고 적용 조건에 대한 이해가 있어야 합니다. 다른 방식으로 코드를 작성할 수 없습니다. 코드는 하나의 동작 알고리즘을 실현하는 것이므로 부정확 할 수 없습니다.
그리고 여기에서 먼저 직접 작성하는 것이 더 좋으며 아마도 실수를 수정할 것입니다.
등호의 부호를 이해하면 많을수록 적습니다.
링 버퍼:
"가격, 시간" 구조의 충분히 큰 정적 배열 (또는 두 개의 개별 배열)인 버퍼를 가져옵니다.
버퍼의 머리와 꼬리에 "포인터"(인덱스)라는 두 개의 변수를 사용합니다.
각 틱마다 헤드에 요소를 추가하고 포인터를 전진시킵니다.
필요한 경우 꼬리의 요소와 시간을 비교하고 포인터를 이동합니다.
가격을 꼬리에 있는 요소와 비교합니다.
일부 포인터가 배열의 끝에 도달하면 이 포인터를 0으로 재설정합니다.
버퍼의 머리와 꼬리에 대한 "포인터"(인덱스)라는 두 개의 변수를 가져옵니다.
각 틱마다 헤드에 요소를 추가하고 포인터를 이동합니다.
필요한 경우 꼬리에 있는 요소와 시간을 비교하고 포인터를 이동합니다.
가격을 꼬리에 있는 요소와 비교합니다.
일부 포인터가 배열의 끝에 도달한 경우 이 포인터를 0으로 재설정합니다.