Zdalna zmiana parametrów Twojego EA

Astra nie tak dawno temu wspominał na swoim blogu o genialnym narzędziu jakim jest Dropbox. Napomknął także o tym, że Dropboxa można wykorzystać jako podstawę do budowy zdalnie sterowanego EA.

W tym wpisie pokażę przykładowe rozwiązanie, dzięki któremu możliwa będzie zmiana parametrów EA ze zdalnego komputera, bez konieczności stosowania rozwiązań typu Remote Desktop, za to przy użyciu Dropboxa.

Słowem wstępu

Załóżmy przykładowy kod EA:

extern double param1;
extern string param2;

int init() {
 // ...
}

int start() {
 // ...
 // zakładamy, że kod odwołuje się do param1 i param2
}

Jaka jest idea działania tego rozwiązania?
To bardzo proste: MQL umożliwia bezproblemowy odczyt plików z katalogu experts\files, wystarczy więc sprawić, aby katalog files lub jego wybrany podkatalog były synchronizowane przy użyciu Dropboxa, a następnie regularnie odczytywać plik ustawień oraz zastosować te odczytane ustawienia.

Synchronizacja

Sprawienie, aby katalog files lub wybrany jego podkatalog były synchronizowane jest bajecznie proste, wystarczy w linii poleceń wpisać (Vista/Win7):

mklink /J "D:\My Dropbox\MT4Files" "C:\Program Files\MetaTrader\experts\files"

Oczywiście zakładamy, że D:\My Dropbox to katalog Dropboxa, a C:\Program Files\MetaTrader to ścieżka do katalogu MetaTradera oraz mamy do czynienia z systemem plików NTFS.

Jeżeli używacie Windows XP, który nie posiada polecenia mklink pobierzcie narzędzie Junction Tool (opis składni pod linkiem).

Po wydaniu tego polecenia Dropbox powinien natychmiast rozpocząć synchronizację katalogu files, przed przejściem dalej polecam sprawdzenie czy tak rzeczywiście się dzieje – albo poprzez stronę Dropboxa, gdzie można przeglądać wszystkie pliki albo też z innego komputera, z którym Dropbox jest synchronizowany.

Import ustawień

Import ustawień jest zadaniem stosunkowo prostym, wystarczy wykorzystać poniższą funkcję:

void importSettings(string file) {
   int f=FileOpen(file,FILE_READ|FILE_CSV,"=");
   if(f==-1) return;

   while(!FileIsEnding(f)) {
      string name=FileReadString(f);

      if(name=="param1") param1=StrToDouble(FileReadString(f));
      if(name=="param2") param2=FileReadString(f);

   }
}

Parametry możemy dodawać wg. powyższego schematu i tutaj jedna uwaga: zalecam używanie zawsze funkcji FileReadString i dopiero konwersję do typu danego parametru – po prostu z moich obserwacji wynika, że taka konstrukcja gwarantuje minimalną ilość błędów, które powstają np. przy użyciu FileReadDouble (w sumie nie wiadomo z czego to wynika).

Zdalne sterowanie w działaniu

Jeśli ukończyliśmy modyfikację naszego EA wzbogacając go o funkcję importującą, możemy przystąpić do uruchomienia.

Tworzymy w katalgu files plik z konfiguracją np. settings.txt i wpisujemy w nim wartości dla poszczególnych parametrów:

param1=test
param2=2

A następnie wywołujemy import ustawień z funkcji start:

int start() {
    importSettings("settings.txt");
    Comment("param1: "+param1+"\nparam2: "+param2);
    // ...
}

Teraz wystarczy jedynie modyfikować plik ustawień, aby EA automatycznie wczytał nowe ustawienia – dzięki Dropboxowi nie ma znaczenia na którym komputerze (z podłączonym Dropboxem) dokonamy zmian – Dropbox sam prześle je na komputer z EA, aby EA mógł je zastosować.

Autor: Łukasz Tomaszkiewicz

Podziel się ze znajomymi:

Prześlij nam swoje uwagi

[contact-form-7 404 "Not Found"]
  • Facebook