Doszło sporo nowych funkcjonalności, edytowalnych w inputs.
Nie powiem, ważnym etapem dla żółtodzioba jest wkomponowanie w program zdefiniowanych przez siebie zmiennych enum.
Dopiero wtedy czuć tę władzę nad programem i nad opcjami w interfejsie użytkownika.
Wprowadziłem różne tryby MM, czy też możliwość zdefiniowania przez użytkownika sygnałów.
Pisałem jak w transie ale oczywiście nie ustrzegłem się błędów.
O ile prostsza wersja programu działała bez zastrzeżeń, o tyle rozbudowana nie działa jak powinna.
A że jest to jak dotąd moje największe "dzieło", to teraz trzeba odnaleźć nieścisłości w 1000 linijkach kodu....
Rozwiązuję to małymi kroczkami, pewnie najlepiej to byłoby przepisać jeszcze raz i popracować nad rozgałęzieniem warunków.
Zobaczy się.
Dzisiaj znalazłem rozwiązanie dla wpisywania przedziału czasu, kiedy EA działa a kiedy nie.
Chodzi o regularne codzienne umożliwienie handlu i zamykanie handlu o stałych godzinach.
Okazuje się, że o ile w sytuacji, gdy zaczyna się powiedzmy o 16:00, a kończy o 20:00 jest to proste, o tyle dla startu o 23:00 i końca o 07:00 już trzeba napisać inny warunek. A było to u mnie konieczne, jako że mam VPS minus dwie godziny od naszej strefy.
Żeby wnieść cos od siebie do tego forum, wklejam poniżej kod programu, którego celem jest zbadanie, czy w obecnej chwili handel jest dozwolony czy nie. Użytkownik definiuje godziny handlu wg własnych kryteriów. Należy pamiętać o formacie HH:MM:SS
Sekundy można pominąć. Reszty jeszcze nie testowałem, bo testowania mam w cholerę.
Jakby ktos kiedys potrzebował do swojego EA, problem nie jest skomplikowany ale trzeba chwilę pomyśleć:
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| TRADING_HOURS.mq4 |
//| MSTFKR |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "MSTFKR"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern string START_HOUR = "08:00";
extern string END_HOUR = "21:45";
bool ARE_TRADING_HOURS_NOW = false;
void OnTick()
{
Print("TimeLocal = ",TimeLocal());
datetime START_AT = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE)+" "+START_HOUR);
Print("Start Trade At ",START_AT);
datetime STOP_AT = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE)+" "+END_HOUR);
Print("Stop Trade At ",STOP_AT);
if(START_AT<STOP_AT)
{
Print("Start_At<Stop_AT");
if(TimeLocal()>=START_AT && TimeLocal()<STOP_AT)
{ ARE_TRADING_HOURS_NOW = true ; }
if(TimeLocal()<START_AT && TimeLocal()>=STOP_AT)
{ ARE_TRADING_HOURS_NOW = false ; }
}
if(START_AT>STOP_AT)
{
Print("Start_At>Stop_At");
if(TimeLocal()>=START_AT || TimeLocal()<STOP_AT)
{ ARE_TRADING_HOURS_NOW = true ; }
if(TimeLocal()<START_AT && TimeLocal()>=STOP_AT)
{ ARE_TRADING_HOURS_NOW = false ; }
}
if(ARE_TRADING_HOURS_NOW==true)
{Print("Trading Allowed");}
if(ARE_TRADING_HOURS_NOW==false)
{Print("Trading Not Allowed");}
}
Wiem, że zostało to napisane tysiące razy, tak więc przepraszam, że powielam temat.
Niemniej mam nadzieję że się komuś początkującemu kiedyś przyda, a jako że wcześniej opublikowałem lipną wersję tego samego, to poczuwam się do obowiązku aby udostępnić lepszą wersję tej funkcjonalności.