Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Mistyfikator pisze:
30 cze 2022, 17:24
ninjaproject pisze:
30 cze 2022, 17:19
Nie w inputs!
W inputs dajesz stringi.
Potem te stringi wstawiasz w formułkę.

No i nie używaj już extern tylko używaj input!
Ech, tego się obawiałem że to jedyne wyjście.

Czemu inputs ?

Extern daje fajną możliwość ingerencji w zmienne bez konieczności ponownego uruchamiania EA.
Bo z dokumentacji wynika, że to jest różnica pomiędzy inputs a extern.

Ale przyznam, że uwierzyłem na słowo.



****

Spróbuję też rozwiązania z ENUM. Ale muszę siąść do kompa :D :D :D
extern się nie używa w obecnej nomenklaturze - będzie nadal działać w MT4, ale nie w MT5.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

Tematu MQL5 to nawet nie zacząłem.

Ale jest to nieuniknione

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Mistyfikator pisze:
30 cze 2022, 17:38
Tematu MQL5 to nawet nie zacząłem.

Ale jest to nieuniknione
Ale, jak coś działa tak samo w MQL4 i MQL5, to warto od razu się już nauczyć tych rzeczy.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
30 cze 2022, 17:50

Ale, jak coś działa tak samo w MQL4 i MQL5, to warto od razu się już nauczyć tych rzeczy.

Nie ma wyjścia, będę przepisywał to co mam w MQL4 do MQL5.
Ale najpierw skończę EA na tyle, żeby można było postawić za nim v1.0 ;)

Spore są różnice? między 4 a 5? Ile czasu powinno zająć nauczenie się tych różnic?
Bo jak długo, to wolałbym innym razem zacząć :D

Co do datetime w inputs, widzę że nie ma wyjścia: należy zastosować string.
Szkoda czasu na tworzenie problemów, które są już rozwiązane.

Co tu mówić, od użytkownika EA można wymagać, aby potrafił wpisać dane z inputs we właściwym formacie ;)

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Jest mnóstwo bardzo denerwujących, małych różnic, które powodują, oczywiście, że MQL4 nie kompiluje się do MQL5. No i nie ma tych wszystkich ułatwień co w MQL4. Np. Bid, Ask nic tam nie znaczą, trzeba definiować te zmienne. Ale, ludzie to już rozwiązali za pomocą bibliotek.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

Nie brzmi zachęcająco.

Temat musi zaczekać.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
30 cze 2022, 16:41

Kod: Zaznacz cały

StrToTime(TimeToStr(dt,TIME_DATE)+" "+START_HOUR);
No i dopiero siadłem do tematu.
Szkoda, że w weekend, bo wolałbym patrzeć na konto demo na bieżących notowaniach, a tak będę jestem skazany na tester.


Ale patrzę na ten kod twój powyżej i nijak tego nie rozumiem.

Zrobiłem prostszym sposobem:

Kod: Zaznacz cały


input string START_HOUR = "23:00";

datetime START_AT = StrToTime(START_HOUR);

Od razu pokazuje tak:
2022-07-02 at 00-16-25.png

Enum, szkoda że nie dało rrady zdefiniować wartości w nawiasie, jako 00, 01, 02, 03, 04 ...
Nie miałem czasu nad tym jeszcze posiedzieć, ale chyba by tak można zrobić switchami.
Jak dla mnie spoko motyw, scroll i bardzo szybko ustawiasz parametry bez dotykania klawiatury.
Może przy kolejnej wersji mojego programu ;)

Na razie trzeba wpisać w takim formacie:

00:00
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 02 lip 2022, 00:36 przez Mistyfikator, łącznie zmieniany 1 raz.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

No to zrobiłeś, ale nie wziąłeś pod uwagę kilku rzeczy.
Nie przypadkiem jest tam zmienna dt.

Zwykle jest tak, że gdy uważasz, że coś można zrobić prościej, to znaczy że albo o czymś nie wiesz, albo nie pomyślałeś o tym.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

Oki, przemyślę to jeszcze.

Na razie tester pokazuje dane w formacie datetime, przekonwertowane do postaci z bieżącym rokiem i miesiącem w domyśle.
Wszystko wskazuje na to, że program rozpoznaje te dane prawidłowo.
2022-07-02 at 00-49-14.png

Program w takiej postaci:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                    TIME_TEST.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 = "23:00";
extern string END_HOUR = "19:30";
extern string CLOSE_TIME = "19:59";

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
   datetime START_AT = StrToTime(START_HOUR);
   Print("Start Trade At ",START_AT);
   
   datetime STOP_AT = StrToTime(END_HOUR);
   Print("Stop Trade At ",STOP_AT);
   
   datetime CLOSE_ALL = StrToTime(CLOSE_TIME);
   Print("Close Trade At ",CLOSE_ALL);
   
   if(TimeCurrent()>=START_AT||TimeCurrent()<=STOP_AT)
      {Print("Trading Allowed");}
   
   else
      {Print("Trading Not Allowed");}
   
//---
   
   {
   }
    
   
  }
//+------------------------------------------------------------------+


Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
02 lip 2022, 00:32
No to zrobiłeś, ale nie wziąłeś pod uwagę kilku rzeczy.
Nie przypadkiem jest tam zmienna dt.

Zwykle jest tak, że gdy uważasz, że coś można zrobić prościej, to znaczy że albo o czymś nie wiesz, albo nie pomyślałeś o tym.
Oki.
Skoro wcześniej pisałem:

Kod: Zaznacz cały

datetime START_HOUR = StrToTime(D'23:00');
Tak więc i teraz by pasowało napisać D' i ' towarzyszące 23:00 (bo w takim formacie zapisywane będą dane w inputs).

Tak więc przyznaję rację Ninjaproject, napiszę tak:

Kod: Zaznacz cały

datetime START_AT = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE)+" "+START_HOUR);
Podejrzewam, że jest to jakiś wzór na zapisanie tego, co pisałem po D'
Ciężko było zrozumieć, że TimeToStr jest argumentem dla StrToTime ! Ale już się przejaśnia.
Zresztą, nie udało się napisać w nawiasie kombinacji D' i string.
A w testerze działa również. I gitara, pytanie tylko dlaczego działało wcześniej jak tak wrzuciłem String bezpośrednio jako argument StrToTime.
Ale nie wnikam w takim razie.

Co co enum, widzę że się da zadeklarować bardzo wiele i jest to możliwe w inputs. Szkoda tylko , że nie może mieć to następującej postaci: {00, 01, 02, 03, 04....}
Identifier expected.

Jest EnumToString, tak więc byłoby wspaniale !

Na razie doczytałem, że można zawęzić pole wybory liczb przy pomocy pewnych typów danych, np uchar.
Jeszcze nie rozgryzłem jak to działa. Ale pewnie jest to jakaś podstawowa kwestia.

Nie wiem, czy nie poświęcam na to zagadnienie zbyt wiele czasu, pewnie na razie zadowolę się string w inputs.

Tym bardziej, że tester pokazuje, że działanie programu pozostaje właściwe np w przypadku, gdy dane wejściowe zostaną podane w niewłaściwym formacie, to zwraca godz 00:00.

Tak więc szkoda czasu na rozwiązywanie problemu, który nie istnieje.
Jest to zagadnienie z gatunku tych bajeranckich, ale zajmę się tym w przyszłości.
Najwyżej wygeneruje to kilka dodatkowych linijek kodu.

ODPOWIEDZ