Blokada oczekujących.

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
admkowal
Pasjonat
Pasjonat
Posty: 874
Rejestracja: 29 paź 2009, 14:57

Blokada oczekujących.

Nieprzeczytany post autor: admkowal »

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
its not what you trade its how you trade it
trading is waiting
--
więcej info na temat tradingu - strona www w profilu

AK

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

1 Skrypt -> zakłada oczekujące
2 Skrypt- > kasuje oczekujące
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
admkowal
Pasjonat
Pasjonat
Posty: 874
Rejestracja: 29 paź 2009, 14:57

Nieprzeczytany post autor: admkowal »

No fajnie, że jest skrypt który zakłada lub usuwa oczekujące... Ale ja potrzebuję tak jakby 'hurtowo' je usunąć a potem przywrócić do istnienia.
its not what you trade its how you trade it
trading is waiting
--
więcej info na temat tradingu - strona www w profilu

AK

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Ale w czym masz problem? przecież skryptem to możesz wykonać (jeden zapisuje otwarte i je usuwa, a drugi odczytuje i otwiera)
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
admkowal
Pasjonat
Pasjonat
Posty: 874
Rejestracja: 29 paź 2009, 14:57

Nieprzeczytany post autor: admkowal »

Aha rozumiem. Tzn. rozumiem idee ale wykonania już nie. Mógłbyś wytłumaczyć to laikowi?
its not what you trade its how you trade it
trading is waiting
--
więcej info na temat tradingu - strona www w profilu

AK

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

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
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

//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.

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); 

}
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.
fx-forum

Awatar użytkownika
admkowal
Pasjonat
Pasjonat
Posty: 874
Rejestracja: 29 paź 2009, 14:57

Nieprzeczytany post autor: admkowal »

Dzięki MkubuxK za chęć pomocy. Mam nadzieję, że ktoś się dołączy z potrzebną wiedzą bo ja to...
its not what you trade its how you trade it
trading is waiting
--
więcej info na temat tradingu - strona www w profilu

AK

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

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

bialy
Stały bywalec
Stały bywalec
Posty: 54
Rejestracja: 16 maja 2011, 20:41

moze byc tak

Nieprzeczytany post autor: bialy »

zapis zlecen do pliku:

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);
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:

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);
na wszelki wypadek dodalbym zerowanie pliku po otwarciu zlecen. po FileClose(handle) jeszcze raz open/close

Kod: Zaznacz cały

handle = FileOpen("test.txt",FILE_CSV|FILE_WRITE);
FileClose(handle);
oszczedzajmy cykle procesora

ODPOWIEDZ