podłączenie się do MT przez aplikację w C++

O jezykach programowania w platformach i nie tylko.
dulf
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 24 kwie 2010, 15:13

Re: podłączenie się do MT przez aplikację w C++

Nieprzeczytany post autor: dulf »

kowal pisze: Tak jak wspomniałem wcześniej WinApi dopiero się uczę, a DLL jest prawie na końcu podręcznika więc tak za wczasu zapytam: czy pisząc "Zrób sobie w c dlla" miałeś na myśli C++ czy czysty C. Jest to o tyle istotne, że nie wiem, czy w takim DLL-u moge korzystać z operatora new i delete czy muszę stosować funkcję malloc do dynamicznego alokowania pamięci? - W moim przypadku jest to dość istotny aspekt programowania bo często z niego korzystam :)
1.Funkcje kodowane w dll muszą mieć odpowiednią konwencję wywołań.

2.Bibliotekę możesz napisać używając wszelkich mechanizmów oraz std z C++ , funkcje eksportowane muszą być jednak oznaczone jako extern "C" co zapobiegnie "maglowaniu" nazw funkcji które wtedy nie będą rozpoznawane od strony innych aplikacji jeśli będziesz próbował ładować dynamicznie dll.Niektóre środowiska programistyczne dodają mimo to swoje znaczniki do takich funkcji więc należy sprawdzić w opisie.

3.Zarządzanie pamięcią w dll może być trudne , chyba że używasz dll na jednym wykresie .Zmienne globalne w przypadku gdy użyjesz np. EA na kolejnym wykresie które korzysta z tej biblioteki zostaną nadpisane ,czyli jeden wykres będzie mieszał w danych innego wykresu - Nie możesz więc w prosty sposób zarządzać pamięcią dynamicznie i statycznie poprzez zmienne globalne.Należy to rozwiązać pisząc odpowiedni kod (uwzględniający zachowanie dll w Win) lub stosując zmienne umieszczone w sekcji TLS .
Jakie są dyrektywy dla kompilatorów i sposoby użycia TLS zależy od środowiska w którym tworzysz bibliotekę.
Pisanie złożonych dll wymaga poznania mechanizmów systemu dotyczących sposobu komunikacji aplikacji z dll i dostępnych funkcji WinAPI.

Ps.Nie męcz buły tylko pisz kod.
Nie spiesz się , zawsze zdążysz stracić .

kowal
Bywalec
Bywalec
Posty: 20
Rejestracja: 20 wrz 2012, 14:38

Re: podłączenie się do MT przez aplikację w C++

Nieprzeczytany post autor: kowal »

@dulf dzięki za słuszne uwagi - szczególnie odnośnie punktu 3!
Czytałem coś odnośnie dll, że jak jest wywoływana w różnych programach to jest tworzona tak jakby kopia, ale jak stworzę wskaźnik do przecież jego kopia będzie wskazywać na to samo miejsce w pamięci - więc zaczynają się schody :(
Będę to musiał w takim razie przemyśleć...
Z drugiej strony chwilowo chcę się skoncentrować na badaniach - więc nie planuję korzystać z kilku EA na kilku instrumentach - skupię się na jednym EA i jednym rynku :).

Awatar użytkownika
neosb
Gaduła
Gaduła
Posty: 114
Rejestracja: 12 lis 2011, 21:36

Re: podłączenie się do MT przez aplikację w C++

Nieprzeczytany post autor: neosb »

na prawde nie rozumiem dlaczego upierasz sie na c jezeli mozesz robic wszystko w mql - internet masz, dostep do dokumentacji masz, a tak widze ze twoim problemem jest alokacja pamieci. piszac programy musisz umiec zastosowac nalepsze/najprostsze rozwiazanie i byc w stanie uczyc sie nowych rzeczy, w przeciwnym razie "hello forex" - to max. nie chce ci mowic co masz robic, po prostu sprobuj przejrzec dokumentacje mqla (moze byc 5) i zastanow sie jak bys to napisal w nim i wtedy pozostanie juz tylko to napisac. oczywiscie rozumiem twoje przywiazanie do c tylko jezeli masz ruch lewostronny to latwiej jest sie poruszac samochodem o dopasowanej do jezdni stronie kierowcy...
"jako to żydzi mieli w zwyczaju powtarzać - lepsze kilo handlu niz 10 kilo roboty"

kowal
Bywalec
Bywalec
Posty: 20
Rejestracja: 20 wrz 2012, 14:38

Re: podłączenie się do MT przez aplikację w C++

Nieprzeczytany post autor: kowal »

Tylko, że ja do tej pory robiłem wszystko w MQL-u...
Problem z alokowaniem pamięci nie jest jedyny, ale jest dla mnie bardzo istotny. Często używam tablic dwu lub trzy wymiarowych, których rozmiar chciałbym dopasowywać według własnych potrzeb w danej chwili - a MQL niestety pod tym względem nie daje dużych możliwości!
Oczywiście mogę się męczyć dalej z MQL-em i stworzyć sobie tablicę, która będzie 10 razy większa niż moje potrzeby lub próbować bawić się na 1 wymiarowej tablicy lub użyć dyrektywy #define i w kodzie sobie ustawić rozmiary na początku programu, ale po pewnym czasie żadne z tych rozwiązań nie jest dobre - żeby nie powiedzieć "bardzo uciążliwe". Dodam może jeszcze, że przynajmniej 2 z takich tablic mają po kilka tysięcy wierszy więc ilość kolumn ma znaczenie.

Poza tym tak jak pisałem wcześniej - nie jestem programistą z zawodu i nie jest mi potrzebna znajomość kilku języków programowania. Fakt, że złapałem małego bakcyla i chcę się wyspecjalizować w jednym z nich, ale na pewno nie będzie to MQL5 tylko coś bardziej uniwersalnego, w czym będę mógł się bawić zarówno w zakresie forex-u jak również innych dziedzinach moich zainteresowań. W tym miejscu zaznaczam również, że dla mnie forex to tylko jedno z wielu hobby i zabawa a nie tak jak dla większości próba szybkiego wzbogacenia się.

Oczywiście ktoś powie, że jak znam C++ to MQL5 to pestka - może i tak, ale i tak trzeba będzie masę czasu poświecić na przejście z jednego języka na drugi. A po co mam się uczyć jakiegoś ułomnego języka, który w dodatku nie przyda mi się do niczego więcej jak tylko do pisania strategii w MT? Jak bym miał wybierać to przesiadłbym się na C# i zmienił platformę. Niestety na tą decyzję jest już za późno - za dużo czasu włożyłem w C++ i po prostu chcę już skończyć jego wtajemniczanie.
Piszesz, że "muszę umieć uczyć się nowych rzeczy"? No przecież do tego właśnie zmierzam - ale nie nowych związanych z MQL tylko nowych związanych z C++... Może teraz jest trochę pod górkę, ale przynajmniej jak kiedyś będę chciał napisać jakąś aplikację nie związaną z MT i/lub forexem to będę już w domu!
Nie kwestionuję oczywiście ogromnych możliwości jakie daje MQL. W samym MQL4 można zdziałać niesamowite rzeczy, ale prawda jest taka, że ma on swoje słabe strony - zarówno MQL4 jak również MQL5...

Awatar użytkownika
cf16
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 27 sty 2012, 18:43

Re: podłączenie się do MT przez aplikację w C++

Nieprzeczytany post autor: cf16 »

tu jest working-example
niestety dll-ki sie nie dolaczyly
jesli podepniesz QuantLiba to sobie skompilujesz,
jesli nie podepniesz to mechanizm jaki zastosowac by skorzystac w MT4 z kodu C++ tez mozesz zobaczyc

http://cf16.posterous.com/quantlib-dll- ... ession-mt4

xwing
Stały bywalec
Stały bywalec
Posty: 45
Rejestracja: 26 maja 2012, 10:27

Re: podłączenie się do MT przez aplikację w C++

Nieprzeczytany post autor: xwing »

Możesz użyć Pipe.
(Ja tak zrobiłem podpinając do mt4 aplikację napisaną w Delphi.)

Link do opisu:

Kod: Zaznacz cały

http://www.forexfactory.com/showthread.php?t=125117
Na wykres wrzucam strategię wykonującą polecenia typu Buy, Sell, itp. oraz skrypt, odpowiedzialny za komunikację z zewnętrzną aplikacją. (Lepiej jest zrobić dll, zamiast skryptu, ale mi to nie przeszkadza.)

Parametry, które odbierze skrypt przekazuję strategii poprzez zmienne globalne :)
Proste i bezproblemowe.

Obrazek

Ustalam sobie w aplikacji Przykładowo kwotę i naciskam Buy, skrypt odbiera polecenie i przekazuje strategii.
Strategia wykonuje zlecenie i zeruje zmienną globalną - czeka na kolejne polecenia od aplikacji.

Ulu
Uczestnik
Uczestnik
Posty: 1
Rejestracja: 27 paź 2012, 16:58

Re: podłączenie się do MT przez aplikację w C++

Nieprzeczytany post autor: Ulu »

kowal pisze: Tak jak wspomniałem wcześniej WinApi dopiero się uczę, a DLL jest prawie na końcu podręcznika więc tak za wczasu zapytam: czy pisząc "Zrób sobie w c dlla" miałeś na myśli C++ czy czysty C. Jest to o tyle istotne, że nie wiem, czy w takim DLL-u moge korzystać z operatora new i delete czy muszę stosować funkcję malloc do dynamicznego alokowania pamięci? - W moim przypadku jest to dość istotny aspekt programowania bo często z niego korzystam :)
Matko Bosko, a kto jeszcze uczy sie winapi. Może od razu zabierz się za assembler? ;)
Potrzebne ci specjalne EA napisane w MQL i dll laczący sie z z EA i przekazujace po jakims protokole (np. UDP) wiadomosci dla twojej aplikacji w C++.

EA->DLL->APP - czytanie MT4
EA<-DLL-<APP - pisanie albo wydawanie polecen dla MT
Taki system gotowy znajdziesz napewno. Sam sobie napisalem takie cudo ale C# i dziala po UDP. Niestety twoja aplikacja musialaby sie "nauczyc" odczytywac informacje przesylane po UDP

ODPOWIEDZ