PDA

Zobacz pełną wersję : Wszelkie wskazówki dotyczące szybszego wykonywania EA?



BeatrizMixxok
06-01-2015 21:48, 21:48
Cześć,

Zastanawiam się, czy ktoś mógłby udzielić wskazówek lub porad, jak przyspieszyć wykonywanie kodu. Nie próbuję budować HFT, więc wykonanie w czasie rzeczywistym jest wtórne (ale oczywiście zawsze jest to bonus). Zamiast tego próbuję zmniejszyć czas testowania egii między kolejnymi przejściami.
Będzie to miało oczywiste zalety dla wykorzystania czasu podczas uruchamiania dużej optymalizacji (tak jak ja).

Pracuję w środowisku MetaTrader, ale przyjmuję z zadowoleniem rozmowę z dowolnym językiem, z którego się korzysta.
Mam następujące pomysły, które już wdrażamy:

MetaTrader 5 (64-bitowy i używa wszystkich rdzeni)
Mocniejszy procesor (w ramach jednego budżetu)
Zastosowanie liczb całkowitych
Programowanie obiektowe (nie jestem w 100% na tym, ale wydaje się logiczne, że wiele mniejszych plików .mqh o długości mniejszej będzie szybsze niż jeden gigantyczny plik .mq5 - myśli?)

Jakieś inne sugestie?

Dziękuję bardzo!
https://www.forex-instant.com/attachments/1528588639.png

gasdaso93
12-11-2021 06:10, 06:10
Programowanie obiektowe (nie jestem w 100% na tym, ale wydaje się logiczne, że wiele mniejszych plików .mqh o długości mniejszej będzie szybsze niż jeden gigantyczny plik .mq5 - myśli?)
Prawdopodobnie nie. Nie tak działają komputery ... Kod i tak zostanie skompilowany.

BeatrizMixxok
12-11-2021 07:30, 07:30
Dziękuję za wyjaśnienie.
https://www.forex-instant.com/attachments/1528588640.pngNie mam żadnego wykształcenia w komputerach, ale od jakiegoś czasu uczę się programowania, więc brakuje dużych rozdziałów wiedzy o komputerach. Przepraszam, jeśli to był oczywisty błąd. Szuka dobrych nawyków do nauki, chętnych do nauki.

assacucasya
12-11-2021 08:51, 08:51
Dziękuję za wyjaśnienie.
https://www.forex-instant.com/attachments/1528588640.pngNie mam żadnego wykształcenia w komputerach, ale od jakiegoś czasu uczę się programowania, więc brakuje dużych rozdziałów wiedzy o komputerach. Przepraszam, jeśli to był oczywisty błąd. Szuka dobrych nawyków do nauki, chętnych do nauki.
Zwiększenie mocy obliczeniowej jest ostatnim środkiem, który powinieneś podjąć. Prawdziwy spadek obliczeń polega na optymalizacji algorytmów. Efekt optymalizacji algorytmu można zobaczyć naprawdę ładnie, jeśli spróbujesz obliczyć liczbę iteratywną Fibonacciego a rekursywną. Jedna z nich zajmuje minuty drugiej tylko milisekundy. </P> Edytor mql45 ma wbudowane narzędzie do profilowania, które powinno dać ci podstawową wiedzę o tym, która część algorytmu zajmuje dużo czasu. Jak często wykonuje się Twój kod? Czy naprawdę ważne jest, aby każdy tik był symulowany, czy wystarczy sprawdzić tylko otwarcie baru? Zapewni to xxx% krotny spadek czasu analizy historycznej. Czy są duże fragmenty kodu, których nie trzeba wykonywać wielokrotnie? Czy możesz napisać po prostu, jeśli sprawdzić i lekceważyć wiele obliczeń w każdym cyklu? Mikro-optymalizacja (jeśli naprawdę chcesz, aby ostatni bit mógł działać), jak odwzorowywanie często używanych wartości zamiast ich wielokrotnego obliczania. Zmienne warunkowe pętli buforowej. Myślę, że zmienne lokalne są nieco szybsze, a także zasięg globalny. Więc możesz zaoszczędzić ułamek sekundy tam. Korzystanie z przesunięcia bitowego zamiast dzielenia. Staraj się unikać modulo itp. .... Ale to jest dla ciebie rodzaj przesady.

alberpk193
12-11-2021 10:12, 10:12
Cześć, Z tego, co wiem: wielordzeniowy MT5 może być OK, ale musisz odpowiednio zaprogramować. Oznacza to oddzielenie kodu w kilku wątkach, które mogą być wykonywane jednocześnie. Bardziej wydajny procesor, tak, który przyspieszy twój czas wykonania, ale wtedy, jeśli twój czas transmisji (internet) jest wolny, co nie ma sensu. Używanie liczb całkowitych? Nie rozumiem tego, chcesz przekonwertować podwójne na liczby całkowite i na odwrót? Czas konwersji spowoduje utratę korzyści z ich używania, chyba że wykonasz naprawdę ciężkie obliczenia. OOP, nie, który pozwala tylko na reorganizację kodu, wynikowy plik binarny nie jest szybszy niż kod proceduralny. A długość plików nagłówkowych lub posiadanie wielu plików nagłówkowych zamiast jednego dużego nie ma nic wspólnego z szybkością wykonania. BT

gasdaso93
12-11-2021 11:33, 11:33
Dziękuję za wyjaśnienie.
https://www.forex-instant.com/attachments/1528588640.pngNie mam żadnego wykształcenia w komputerach, ale od jakiegoś czasu uczę się programowania, więc brakuje dużych rozdziałów wiedzy o komputerach. Przepraszam, jeśli to był oczywisty błąd. Szuka dobrych nawyków do nauki, chętnych do nauki.
Nie wiem zbyt wiele o MQL, właśnie dostałem się do tego w weekend. Mam jednak dużo wiedzy na temat innych języków. Chodzi o to, że języki programowania nie są tworzone dla komputerów, są stworzone dla ludzi. Komputer odczytuje przetłumaczoną wersję - generowaną przez kompilator. Wyniki kompilatorów nie przypominają zbytnio tego, co widać w edytorze. Kompilator będzie się często zmieniał (optymalizował), włączając w to wstawianie kodu, co z kolei spowoduje, że kod będzie jeszcze większy, a nie mniejszy. Ogólna wskazówka: Nie idź na mikrooptymalizację, dopóki twój kod naprawdę nie zadziała. To a czasu. Rozwiązuj ogólną strukturę programu, logikę i być może Twoje obliczenia (jeśli w dużej mierze polegasz na tych). Wystarczy spojrzeć na strukturę EA, na przykład, jest całkiem jasne, że zbyt wiele (niepotrzebnych) obliczeń w OnTick () jest złym pomysłem, ponieważ ta rutyna jest nazywana bardzo często.

BeatrizMixxok
12-11-2021 12:53, 12:53
{quote} Zwiększenie mocy obliczeniowej to ostatni środek, który powinieneś podjąć. Prawdziwy spadek obliczeń polega na optymalizacji algorytmów. Efekt optymalizacji algorytmu można zobaczyć naprawdę ładnie, jeśli spróbujesz obliczyć liczbę iteratywną Fibonacciego a rekursywną. Jeden z nich zajmuje minutę drugiego tylko w milisekundach. Edytor mql45 ma wbudowane narzędzie do profilowania, które powinno dać ci podstawową wiedzę na temat tego, która część algorytmu zajmuje dużo czasu. Jak często wykonuje się Twój kod? Czy to naprawdę ważne, aby każdy tykot ...
Cześć Kilian, dzięki za odpowiedź. Iteracyjny a rekursywny Fibonacci: Nigdy o tym nie słyszałem i jest to coś, o czym będę dalej czytał. Znalazłem trochę rzeczy na stackoverflow. Narzędzie do profilowania edytora mql5: Nie jest to coś, czego użyłem wcześniej, znalazłem kilka artykułów na ten temat i przeczytałem o nim teraz. Oczywiste rozwiązanie, dziękuję! OnTick: Byłem tego świadomy i starałem się zachować większość zadań OnBar, ale tak, jednym z rodzajów handlu jest OnTick, który będzie jadł w czasie przetwarzania. To wygląda jak nisko wiszący owoc. Fragmenty kodu, które są wykonywane w kółko ?: Nie jest to obszar, który uważałem za bardzo i powinienem się przyjrzeć. Myślę, że masz rację, powinna tu być jakaś dobra skuteczność. Mikro optymalizacja: Uwielbiam sugestie i jeśli zajdę tak daleko, na pewno spróbuję czegoś (niezależnie od tego, co jest dobre dla mojej nauki). Bardzo doceniane.

BeatrizMixxok
12-11-2021 14:14, 14:14
Cześć, Z tego, co wiem: wielordzeniowy MT5 może być OK, ale musisz odpowiednio zaprogramować. Oznacza to oddzielenie kodu w kilku wątkach, które mogą być wykonywane jednocześnie. Bardziej wydajny procesor, tak, który przyspieszy twój czas wykonania, ale wtedy, jeśli twój czas transmisji (internet) jest wolny, co nie ma sensu. Używanie liczb całkowitych? Nie rozumiem tego, chcesz przekonwertować podwójne na liczby całkowite i na odwrót? Czas konwersji spowoduje utratę korzyści z ich używania, chyba że wykonasz naprawdę ciężkie obliczenia. OOP, nie, to pozwala tylko na reorganizację ...
Hej Broketrader, wielordzeniowy MT5: Nigdy nie zdawałem sobie sprawy, że możesz oddzielić swój kod na różne takie wątki. To może zrobić ogromną różnicę. Obecnie korzystasz tylko z funkcji wielordzeniowej przy uruchomieniu optymalizatora. (co jest epicką różnicą w stosunku do mt4). Procesor: szukam obecnie możliwości nabycia nowej maszyny. Nowe układy Haswell wyglądają całkiem zgrabnie. Szybkość połączenia internetowego nie jest problemem. Po prostu skupiam się na wykonywaniu kodu. Liczby całkowite: Mogę być całkowicie błędny, ale z moim ograniczonym zrozumieniem Liczby całkowite są łatwiejsze do obliczenia przez maszynę niż wymówienie Podwójności. na przykład działają tylko w pipsach lub _ punktach podczas obliczania rzeczy takich jak przystanki i cele. Nie interesuje się konwersją liczb całkowitych i podwójnych tam iz powrotem. int StopLoss = 300;/StopLoss w _Points Nie można zrobić wszędzie, tylko tam, gdzie pojawia się szansa. Dziękuję za wszystkie uwagi, które są bardzo mile widziane.

BeatrizMixxok
12-11-2021 15:35, 15:35
{quote} Nie wiem zbyt wiele o MQL, właśnie dostałem się do tego w weekend. Mam jednak dużo wiedzy na temat innych języków. Chodzi o to, że języki programowania nie są tworzone dla komputerów, są stworzone dla ludzi. Komputer odczytuje przetłumaczoną wersję - generowaną przez kompilator. Wyniki kompilatorów nie przypominają zbytnio tego, co widać w edytorze. Kompilator będzie się często zmieniał (optymalizował), włączając w to wstawianie kodu, co z kolei spowoduje, że kod będzie jeszcze większy, a nie mniejszy. Ogólna wskazówka: Nie idź na mikrooptymalizację ...
Dzięki za ogólne porady. Po prostu to zrobię. Zmierz się z większym problemem (struktura, logika i obliczenia), a następnie idź w dół do poziomu mikro. OnTick () wygląda na świetne miejsce do rozpoczęcia łatwego zdobywania zysków. Nowy w mql? Powodzenia w handlu! Jeśli znasz ogólnie programowanie, powinieneś dość szybko przerzucić się przez mql. Mql4 jest z pewnością najlepszym wyborem, ale jeśli znasz swoje rzeczy, przejdź od razu do mql5. Korzyści z testowania dają jakąkolwiek korzyść, którą może zaoferować mql4. Jest zmęczonym starym koniem i wszyscy go chłostają.

Pkmi
12-11-2021 16:56, 16:56
Oglądam menedżera zadań systemu Windows, widziałem, że mt4 może maksymalnie wykorzystać 25 CPU, a następnie zablokował mt4. Jak zwiększyć% wykorzystania procesora dla mt4, aby mt4 działało szybko, nie zostało zablokowane?

gasdaso93
12-11-2021 18:17, 18:17
Oglądam menedżera zadań systemu Windows, widziałem, że mt4 może maksymalnie wykorzystać 25 CPU, a następnie zablokował mt4. Jak zwiększyć% wykorzystania procesora dla mt4, aby mt4 działało szybko, nie zostało zablokowane?
Domyślam się, że masz czterordzeniowy komputer - w takim przypadku 25% to 100% jednego rdzenia. Aby korzystać z wielu rdzeni, aplikacja musi być zaprojektowana do wielowątkowości (wykonanie równoległe), więc prawdopodobnie nic nie możesz zrobić na końcu.

Pkmi
12-11-2021 19:37, 19:37
{quote} Domyślam się, że masz czterordzeniowy komputer - w takim przypadku 25% to 100% jednego rdzenia. Aby korzystać z wielu rdzeni, aplikacja musi być zaprojektowana do wielowątkowości (wykonanie równoległe), więc prawdopodobnie nic nie możesz zrobić na końcu.
Tak masz rację. Mój komputer ma czterordzeniowy rdzeń w procesorze. Podziękować.