Blokada oczekujących.
Blokada oczekujących.
Nie wiem czy coś takiego da się zrobić ale podam zagadnienie. Może będziecie wiedzieć jak je rozwiązać.
Mam 10 oczekujących ale nie chce żeby zostały one odpalone w czasie danych. Nie chce mi się ich również usuwać i po danych wstukiwać od nowa. Strasznie to czasochłonne. Czy jest jakaś możliwość aby blokować uruchomienie się oczekujących? Albo ich skasowanie a jakieś EA przywróci je po 'x' czasie?
Dzięki
Mam 10 oczekujących ale nie chce żeby zostały one odpalone w czasie danych. Nie chce mi się ich również usuwać i po danych wstukiwać od nowa. Strasznie to czasochłonne. Czy jest jakaś możliwość aby blokować uruchomienie się oczekujących? Albo ich skasowanie a jakieś EA przywróci je po 'x' czasie?
Dzięki
its not what you trade its how you trade it
trading is waiting
--
więcej info na temat tradingu - strona www w profilu
AK
trading is waiting
--
więcej info na temat tradingu - strona www w profilu
AK
Ale co tu tłumaczyć?
jeden skrypt jest do zapisywania pozycji które usunie (poziomów cen i kierunków) - np do pliku (albo numeru magic aby potem to sprawdzić w historii
a drugi skrypt otwiera identyczne zlecenia
jeden skrypt jest do zapisywania pozycji które usunie (poziomów cen i kierunków) - np do pliku (albo numeru magic aby potem to sprawdzić w historii
a drugi skrypt otwiera identyczne zlecenia
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
//zapisze do osobnego pliku pod nazwami 1, 2 , 3 , 4 ( w zaleznosci od ilosci zlecen ) dane z twoich zlecen oczekujacych a także otwartych, teraz wystarczy tylko skryptem zamknac wszystkie zlecenia. Nie testowalem jeszcze, pisałem tutaj w okienku wiec moga byc bledy, wieczorem sprawdze w wolnym czasie czy dziala jak trzeba.
Skrypt CloseAll.
W osobnym skrypcie teraz wystarczy tylko odczytać wartości z plików. Tego niestety już nie wiem jak zrobić. Patrzę na dokumentację ale nie widzę odpowiednika file write - fileread - by po kolei brał wszystkie wartości.
Kod: Zaznacz cały
string zlecenie="1";
total=OrdersTotal();
for(int a=0;a<total;a++){
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
//parametry ktore ma zapisac do pliku
string orderType=OderType();
string symbol=Symbol();
double sl= OrderStopLoss();
double tp= OrderTakeProfit();
double openPrice= OrderOpenPrice( );
int handle;
handle=FileOpen(zlecenie+".csv", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
FileWrite(handle, orderType, symbol, sl, tp, openPrice )
FileClose(handle);
}
double counter = StrToDouble( zlecenie);
counter++;
zlecenie= DoubleToStr(counter,0);
}
W osobnym skrypcie teraz wystarczy tylko odczytać wartości z plików. Tego niestety już nie wiem jak zrobić. Patrzę na dokumentację ale nie widzę odpowiednika file write - fileread - by po kolei brał wszystkie wartości.
fx-forum
Kod: Zaznacz cały
double counter=5; //nie wiem jak uzyskać wartośc countera z mojego poprzedniego kodu
for(int a=0;a<counter;a++) {
double lot=0.1 // z racji tego ze w poprzednim skrypcie zapomnialem o nim;
int Handle;
Handle=FileOpen(DoubleToStr(++a),FILE_CSV|FILE_READ,";");// File opening
//---------------------------------------------------------
string orderType = FileReadString(Handle);
string symbol= FileReadString(Handle);
double sl = StrToDouble(FileReadString(Handle));
double tp = StrToDouble(FileReadString(Handle));
double openPrice = StrToDouble(FileReadString(Handle));
// Exit
OrderSend(symbol,orderType,lot,openPrice,3,sl,tp);
counter++;
}
Funkcja otwierająca plik zapisany poprzednio powyżej. Nie pisałem czegoś podobnego jak do tej pory więc przydałby się teraz ktoś bardziej doświadczony co sprawdziłby czy to ma sens. Pominąłem obsługę błędów by kod był bardziej czytelny.
fx-forum
moze byc tak
zapis zlecen do pliku:
kazde wywolanie skryptu nadpisuje poprzedni plik, wiec jesli w trakcie przerwiesz to juz zapisane zlecenia przepadna. mozesz pokombinowac z warunkami i kolejnoscia. teraz jest tak ze jesli zapisze poprawnie parametry zlecenia to kasuje zlecenie
otwieranie nowych:
na wszelki wypadek dodalbym zerowanie pliku po otwarciu zlecen. po FileClose(handle) jeszcze raz open/close
Kod: Zaznacz cały
int total = OrdersTotal();
int handle = FileOpen("test.txt",FILE_CSV|FILE_WRITE);
FileWrite(handle,total);
for(int i=total-1; i>=0; i--) {
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType() > 1)
if(FileWrite(handle,OrderSymbol(),OrderType(),OrderLots(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit(),OrderExpiration()) != -1)
while(True) {
RefreshRates();
if(OrderDelete(OrderTicket())) break;
Sleep(1000);
}
}
FileClose(handle);
otwieranie nowych:
Kod: Zaznacz cały
int handle = FileOpen("test.txt",FILE_CSV|FILE_READ);
int total = StrToInteger(FileReadString(handle));
for(i=0; i<total; i++) {
string symbol = FileReadString(handle);
int cmd = StrToInteger(FileReadString(handle));
double volume = StrToDouble(FileReadString(handle));
double price = StrToDouble(FileReadString(handle));
int slippage = 0;
double stoploss = StrToDouble(FileReadString(handle));
double takeprofit = StrToDouble(FileReadString(handle));
int magic = 0;
datetime expiration = StrToInteger(FileReadString(handle));
int cnt=0;
while(cnt<3) {
RefreshRates();
if(OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,"",magic,expiration,CLR_NONE) > 0) break;
Sleep(1000);
cnt++;
}
}
FileClose(handle);
Kod: Zaznacz cały
handle = FileOpen("test.txt",FILE_CSV|FILE_WRITE);
FileClose(handle);
oszczedzajmy cykle procesora