Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: siersciuch »

personov pisze:Wyznaczanie świecy wstecz na podstawie czasu to iBarShift(), ale dysponując godziną zegarową trzeba trochę pokombinować. A co chcesz zrobić z tą świecą ?
Ogólnie, chce uzyskać najwyższą wartość ceny z przedziału czasowego np miedzy 10 a 15. Mam jakieś tam pomysły, ale są bardzo skomplikowane, sadze, że są łatwiejsze i szybsze sposoby żeby uzyskać tą wartość niż pisanie kodu jak książki.

Ma ktoś jakiś szybki sposób? może jest jakaś wbudowana funkcja o której nie wiem :(

-- Dodano: śr 27-02-2013, 15:43 --
personov pisze:Czy istnieje jakaś ogólna przyczyna, że wskaźnik w backteście zamula całe MT4, a w dzienniku pojawia sie komunikat, co tick, że wskaźnik się włącza i wyłącza ?
Co to może być ?
może właśnie przez to zamula, ze się ciągle włącza i wyłącza
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Pjetja »

Wskaźnik wrzucony na wykres pokazuje dobrze i na testerze też pokazuje dobrze do momentu testowania, stąd domniemam że błąd w EA ale tam żadnej filozofii nie ma.

zmodowano Ink.

ziolkowskik
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 25 lut 2013, 21:54

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ziolkowskik »

w_ujek edek pisze:poszukaj bo bylo o tym juz pisane.


ja mam cos takiego
int last_trade=OrdersHistoryTotal();
if(OrderSelect(last_trade-1,SELECT_BY_POS,MODE_HISTORY)==true)
{
magicH=OrderMagicNumber(); //sprawdza magic EA
zamkniecie=OrderCloseTime(); //zwraca czas zamkniecia
zysk=OrderProfit(); //zwraca Profit pozycji
if (zysk<0) pozycjaZS=-1;
else pozycjaZS=1;
}
daj wlasne warunki na SL
Niestety nic nie mogę znaleźć, a koniecznie zależy mi na tym, aby wyrzucona pozycja była znów ustawiona z takimi parametrami jak ta pierwsza w formie zlecenia oczekującego, aby uniknąć poślizgów. Czy takie strategie w ogóle istnieją? Bo dotychczas spotkałem się tylko z takimi, które otwierają na bieżąco zlecenia natychmiastowe...

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: personov »

Pjetja - sformułowanie iCustom jest OK. Wyświetla prawidlowe watości.
Problem jest w kodzie EA, ale nie wiem co rozumiesz przez "rozsypuje się".
Nie wiem też jak sformułowałeś "tp".
W OrderSend() formułę StopLoss daj sobie nawiasy Ask-(.....).
Pokombinuj eliminując powoli wszystko. Np. spróbuj otworzyć pozycję bez TP i SL i zobacz, czy OK. Później dodaj samo TP i zobacz....i tak dalej. Trzeba pokombinować.
Solą życia jest kasa.

Awatar użytkownika
bfx
Pasjonat
Pasjonat
Posty: 1260
Rejestracja: 11 sty 2013, 15:49

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: bfx »

siersciuch pisze: Ogólnie, chce uzyskać najwyższą wartość ceny z przedziału czasowego np miedzy 10 a 15. Mam jakieś tam pomysły, ale są bardzo skomplikowane, sadze, że są łatwiejsze i szybsze sposoby żeby uzyskać tą wartość niż pisanie kodu jak książki.
Ma pobierac najwyższą wartośc tylko z ostatniego przedziału, czy z więcej takich przedziałów w przeszłości? Co jak mamy aktualnie 12tą ? I jeszcze, czy chcesz tego używa na niższych interwałach czy tylko na H1?
"Ty też jesteś Bogiem! Tylko uświadom to sobie, sobie"

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: siersciuch »

bfx pisze:
siersciuch pisze: Ogólnie, chce uzyskać najwyższą wartość ceny z przedziału czasowego np miedzy 10 a 15. Mam jakieś tam pomysły, ale są bardzo skomplikowane, sadze, że są łatwiejsze i szybsze sposoby żeby uzyskać tą wartość niż pisanie kodu jak książki.
Ma pobierac najwyższą wartośc tylko z ostatniego przedziału, czy z więcej takich przedziałów w przeszłości? Co jak mamy aktualnie 12tą ? I jeszcze, czy chcesz tego używa na niższych interwałach czy tylko na H1?
Ma zwracać wartość np z 30 dni wstecz, i ma działać na różnych interwałach, a jak mamy np 12, to, żeby liczył najżywższą od 10 do aktualnego czasu Currenttime() . Myślałem, zrobić ten wskaźnik licząc świeczki ale wtedy jakby zmienił interwał to by godzina otwarcia przedziału z ilością świeczek by się nie zgadzała.

Chyba trzeba to zrobić nie na świeczkach ale na Tick 'ach. Bo ticki dla każdego TF jest takie same. Są jakieś funkcje operujące na tickach?
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

Awatar użytkownika
bfx
Pasjonat
Pasjonat
Posty: 1260
Rejestracja: 11 sty 2013, 15:49

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: bfx »

Nie wiem czy dobrze zrozumiałem.. Chcesz wiedziac jaka była najwyższa cena 30 dni temu między 10 a 15, czy sprawdzac to codziennie przez ostatnie 30 dni?
"Ty też jesteś Bogiem! Tylko uświadom to sobie, sobie"

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: siersciuch »

bfx pisze:Nie wiem czy dobrze zrozumiałem.. Chcesz wiedziac jaka była najwyższa cena 30 dni temu między 10 a 15, czy sprawdzac to codziennie przez ostatnie 30 dni?
To drugie, żeby dla każdego dnia obliczał, najwyższą wartość ceny w przedziale czasowy np miedzy 10 a 15. Każdy dzien jest osobnym przedziałem.
Np w dniu pierwszym, miedzy 10 a 15 cena osiągnęła najwyższą wartość równą 1.2454. W trzecim cena osiągnęła 1.3452 ...itp.
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Pjetja »

personov pisze:Pjetja - sformułowanie iCustom jest OK. Wyświetla prawidlowe watości.
Problem jest w kodzie EA, ale nie wiem co rozumiesz przez "rozsypuje się".
Nie wiem też jak sformułowałeś "tp".
W OrderSend() formułę StopLoss daj sobie nawiasy Ask-(.....).
Pokombinuj eliminując powoli wszystko. Np. spróbuj otworzyć pozycję bez TP i SL i zobacz, czy OK. Później dodaj samo TP i zobacz....i tak dalej. Trzeba pokombinować.
Tylko że właśnie po iCustom mam Comment i wypisuje źle.

Tutaj kod EA. Chyba tu nie ma być co nie tak

Kod: Zaznacz cały

#property link      ""
#define MAGICV 201301191158
//--- input parameters
extern double    Lot=0.1;
extern int       TrailingStop=37;
extern int       StopLoss = 50;
//--- variables

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   //Ilość środków na koncie
   Print( "Dostępne środki na koncie=",AccountFreeMargin() );
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| otwarcie pozycji długiej                                         |
//+------------------------------------------------------------------+
int OpenLong(double tp)
   {
   int ticket;
    if (OrdersTotal()==0)                                           //jeżeli nie ma otwartych pozycji
      {  
      ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-(StopLoss*Point*10),tp,"",MAGICV,0,Blue);   //zajmij pozycję długą
      } 
   }//END OpenLong()  
//+------------------------------------------------------------------+
//| otwarcie pozycji krótkiej                                        |
//+------------------------------------------------------------------+
int OpenShort(double tp)
   {
   int ticket;
      if (OrdersTotal()==0)                                           //jeżeli nie ma otwartych pozycji
         {  
         ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+(StopLoss*Point*10),tp,"",MAGICV,0,Red);   //zajmij pozycję krótką
         } 
   }//END OpenShort()
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(Bars<100)
      {
      Print("Bład danych. Liczba słupków poniżej 100.");
      return(0);
      }
   //obliczenie własnego wskaźnika
   double Pivot = iCustom(NULL,0,"Pivot_Lev",0,0);
   double Support = iCustom(NULL,0,"Pivot_Lev",1,0);
   double Resistance = iCustom(NULL,0,"Pivot_Lev",2,0);
Comment
   (
   "\n"+
   "Pivot "+Pivot
   +"\n"+
   "Support "+Support
   +"\n"+
   "Resistance "+Resistance
   );
      if(Open[1]>Pivot && Close[1]<Pivot)  
         {OpenShort(Support);}
      
      if(Open[1]<Pivot && Close[1]>Pivot)  
         {OpenLong(Resistance);}      
   return(0);
  }
//+------------------------------------------------------------------+
Ze zmianą SL i TP też próbowałem i nic to nie zmienia. Nie wiem co tu jeszcze może nie działać. Albo niedowidzę albo czegoś nie wiem.

Awatar użytkownika
bfx
Pasjonat
Pasjonat
Posty: 1260
Rejestracja: 11 sty 2013, 15:49

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: bfx »

siersciuch pisze: To drugie, żeby dla każdego dnia obliczał, najwyższą wartość ceny w przedziale czasowy np miedzy 10 a 15. Każdy dzien jest osobnym przedziałem.
Zrobiłem 8) problem pojawi się jeśli twój przedział będzie przełamywał się na kolejny dzień, np od 22:00 do 2:00. Wtedy nie zadziała. Trzeba by wtedy przerobic kod.

Kod: Zaznacz cały

int start()
  {
int dni_wstecz  =30;
int godz_od     =10;
int godz_do     =15;

int i,j;
string wynik;
double max[100];
int dzien;
datetime bbb;

for (i=dni_wstecz;i>=0;i--)
 {
 dzien=iTime(NULL,PERIOD_D1,i);
 for (j=24;j>0;j--)
   {
   bbb=dzien+j*godz_od*360;
   if (j>=godz_od && j<=godz_do ) max[i]=MathMax(max[i],iHigh(NULL,PERIOD_H1,iBarShift(NULL,PERIOD_H1,bbb)));
   }
 wynik=StringConcatenate(wynik," \n ","high ",i," dni temu: ",max[i]);
 }
 Alert(wynik);
   return(0);
  }
"Ty też jesteś Bogiem! Tylko uświadom to sobie, sobie"

ODPOWIEDZ