Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

kargi pisze:Nie bardzo wiem jakiej funkcji do tego użyć
Sprawdzenie daty zamknięcia zlecenia -> OrderCloseTime

oczywiście razem z przeleceniem wszystkich zleceń w historii -> użycie OrderSelect

Sprawdzenie na której świecy wstecz zamknęło się zlecenie -> iBarShift
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Pjetja
Bywalec
Bywalec
Posty: 20
Rejestracja: 22 lip 2011, 18:53

Nieprzeczytany post autor: Pjetja »

Panowie czy mógłby mi ktoś powiedzieć co tu nie gra?
Warunki wszystkie mam ok. Jak w tych ifach wpiszę rysowanie strzałek to rysuje dobrze a pozycji otwiera mnóstwo. Podejrzewam że czegoś nie wiem ale nie wiem czego :?

Kod: Zaznacz cały

if(ArrayWsk[i+1]>Close[i+1]) //jeżeli poprzedni słupek był na krótkiej
            {
            if (OrdersTotal()==0)                                           //jeżeli nie ma otwartych pozycji
               {
               OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"",MAGICV,0,Blue);   //zajmij pozycję długą
               }
            else
               {
               for(int k=OrdersTotal();k>=0;k--)                                //dla wszystkich owartych pozycji
                  {
                  if(OrderType()==OP_SELL)                                     //jezeli otwarta krótka
                     {
                     OrderSelect(k,SELECT_BY_POS,MODE_TRADES);
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,White);        //zamknij 
                     OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0,"",MAGICV,0,Blue);  //otwórz długą
                     }
                  }//END for
               }//end else
            }
To jest dla pozycji długiej, dla krótkiej zrobiłem analogicznie.

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

najpierw robisz :

Kod: Zaznacz cały

OrderSelect()
a pozniej sprawdzasz

Kod: Zaznacz cały

OrderType()
pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Pjetja
Bywalec
Bywalec
Posty: 20
Rejestracja: 22 lip 2011, 18:53

Nieprzeczytany post autor: Pjetja »

Czyli to ma być w ten sposób?

Kod: Zaznacz cały

if(ArrayWsk[i+1]<Close[i+1]) //jeżeli poprzedni słupek był na długiej
            {
             if (OrdersTotal()==0)                                           //jeżeli nie ma otwartych pozycji
               { 
               OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"",MAGICV,0,Red);   //zajmij pozycję krótką
               }//koniec if order
             else
               {
               for(int j=OrdersTotal();j>=0;j--)                                //dla wszystkich owartych pozycji
                  {
                  OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
                  if(OrderType()==OP_BUY)                                      //jezeli otwarte długie
                     {
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,White);        //zamknij
                     OrderSend(Symbol(),OP_SELL,1,Bid,3,0,0,"",MAGICV,0,Red);  //otwórz krótką
                     }
                  }//END for
               }//end else
          
            }//end if array i+1
Przy testach nadal zajmuje mi i zamyka ponad 2,5tyś pozycji.
Hmm...

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

Nieprzeczytany post autor: Tig3r »

Bo kod działa w ten sposób:

Jeśli poprzedni słupek był na długiej to ->
jeśli nie ma pozycji to ->
sprzedaj ->
w przeciwnym razie (jeśli jest pozycja jakakolwiek otwarta) ->
przeszukaj czy są aktywne longi, jeśli tak zamknij go i otwórz short

jakoś to się kupy nie trzyma, trzeba znaleźć inną drogę - polecam dla każdego zdarzenia osobny warunek i na początku nie używać "else" ;)
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

hmmm wyglada juz dobrze ....
poszukaj beldow moze w pierszych ifach ....

moze zamiast

Kod: Zaznacz cały

if(ArrayWsk[i+1]<Close[i+1]) //jeżeli poprzedni słupek był na długiej 
daj

Kod: Zaznacz cały

if(ArrayWsk[i+1]<Close[i+1] && ArrayWsk[i+1!=0) //jeżeli poprzedni słupek był na długiej  
pozdrawiam
Andrzej Pierz

Pjetja
Bywalec
Bywalec
Posty: 20
Rejestracja: 22 lip 2011, 18:53

Nieprzeczytany post autor: Pjetja »

Po dodaniu do ifa drugiego warunku nic się nie zmieniło.
Spróbuję zrobić to od nowa inaczej, chociaż mi się wydaje że oprócz tego else to się kupy trzyma :wink: Ale słuchając specjalistów zrobię to inaczej.
Dziękuję Panowie za odzew kłaniam się nisko z podziękowaniami.

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

zmien jescze ten kawaleczek kodu :

Kod: Zaznacz cały

for(int j=OrdersTotal();j>=0;j--)
na

Kod: Zaznacz cały

for(int j=OrdersTotal()-1;j>=0;j--)
pozdrawiam
Andrzej Pierz

Arhat
Uczestnik
Uczestnik
Posty: 3
Rejestracja: 16 wrz 2011, 10:05

Nieprzeczytany post autor: Arhat »

Witam. Próbuję napisać swój własny system w mql4. Mam pewien problem. Jako stop chciałbym ustawić wielokrotność atr. ATR jednak zmienia swoją wartość i stop mi "skacze". Jak zrobić żeby zapamiętał jego wartość w momencie otwarcia pozycji a potem już nie aktualizował. Byłbym wdzięczny za odpowiedź

Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Nieprzeczytany post autor: CoVal »

Arhat pisze:Witam. Próbuję napisać swój własny system w mql4. Mam pewien problem. Jako stop chciałbym ustawić wielokrotność atr. ATR jednak zmienia swoją wartość i stop mi "skacze". Jak zrobić żeby zapamiętał jego wartość w momencie otwarcia pozycji a potem już nie aktualizował. Byłbym wdzięczny za odpowiedź
(trudno powiedziec cos ty tam napisal - bo nie zalaczyles kodu), jednakze:

stworz osobna funkcje otwierajaca pozycje i tylko w niej umiesc obliczanie SL bezposrednio przed funkcja OrderSend().
wtedy atr bedzie obliczany tylko i wylacznie w tej funkcji po spelnieniu warunkow do otwarcia, a nie za kazdym razem kiedy przychodzi tick.

ODPOWIEDZ