Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Fx.Player pisze:Podczas pisania EA natrafiłem na problem ze wskaźnikiem Zigzag, który nie zawsze prawidłowo wskazuje szczyty/dołki. Parametry wskaźnika ustawiłem na 1,1,1 (chociaż tak do końca nie wiem co one oznaczają, nie znalazłem nigdzie opisu tych parametrów) , bo zależy mi aby wskaźnik był jak "najczulszy" i wychwytywał szczyty/dołki występujące bardzo blisko siebie (np. dołek w odległości jednej świecy od szczytu). Załączam wykres z zaznaczonym przedziałem czasowym, w którym wskaźnik nieprawidłowo pokazuje ekstrema. Coś źle ustawiłem, można to poprawić? Czy jest to po prostu powszechnie znana wada tego wskaźnika i jeżeli chciałbym mieć bardziej precyzyjne narzędzie to muszę je sam napisać ?
Na pewno jest to wina ustawień ZigZaga. Nie spotkalem sią, aby ktoś ustawiał na 1.1.1.
A dołek jedną swiecę od szczytu to żaden dołek :)
Zależy jak definijesz słowo dołek, bo dla mnie to musi być on widoczny gołym okiem, muszą się świece ułożyć w pewien ksztalt.
A Ty wpisałeś ZigZagowi wartości 1.1.1 i chcesz, aby wykryl dołek po jednej świecy.
Może lepiej w takim przypadku posługiwać się wartościami High[], Low[] świecy.
Solą życia jest kasa.

Fx.Player
Bywalec
Bywalec
Posty: 9
Rejestracja: 29 lut 2012, 03:11

Nieprzeczytany post autor: Fx.Player »

Na załączonym schemacie (przykład c) masz dołek po szczycie i dzieli go dokładnie jedna świeca od szczytu. Po prostu może być taka sytuacja, że są duże ruchy rynkowe i te dwie świece są punktowo bardzo duże i wtedy mimo, że występują jedna po drugiej to można rozpoznać w nich istotne ekstrema (poza tym jakby wziąć pod uwagę interwał D1 to jak najbardziej wskaźnik powinien, a nawet musi sobie z tym poradzić). To przypadek szczególny, jednak w moim EA nie tak rzadki w występowaniu. Jeśli natomiast chodzi o moje nietypowe ustawienia ZigZaga to wynikają one właśnie z tego, że przy w takim układzie ZigZag rysuje szczyty/dołki występujące możliwie najbliżej siebie. Zwiększanie parametrów ZigZaga powoduje, że bierze on większe odległości od kolejnych ekstremów, pomijając te położone bliżej siebie (lub po prostu te o mniejszych wartościach punktowych). Także do tego co potrzebuje, to ustawienia są myślę oke, problem, że Zigzag wtedy nie radzi sobie z prawidłową interpretacją blisko położonych ekstremów.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

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

Nieprzeczytany post autor: personov »

ZigZag raczej sie nie nadaje do tego. A próbowałeś definiować ręcznie ?
Np.:

Kod: Zaznacz cały

if(High[1]>High[0]&&Low[1]>Low[0])///dołek
lub podobnie.
Solą życia jest kasa.

Fx.Player
Bywalec
Bywalec
Posty: 9
Rejestracja: 29 lut 2012, 03:11

Nieprzeczytany post autor: Fx.Player »

Tak, właśnie robię to ręcznie, ale zacząłem przeglądać fora i zobaczyłem, że ludzie korzystają do podobnych celów z ZigZaga, więc stwierdziłem, że może niepotrzebnie tworzę coś, co już ktoś wymyślił, więc sie zainteresowałem ZigZagiem :) No ale, tak jak pisałem wyżej nie przeszedł ten wskaźnik u mnie podstawowych testów :) Ręcznie realizuje to podobnie do tego jak wyżej opisałeś. Dziękuję za zainteresowanie.

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

Nieprzeczytany post autor: Pierz Andrzej »

tak jak zasugerowal personov ja to mam tak w kodzie wskaznika ;)

Kod: Zaznacz cały

   for (int i=0;i<=100;i++)
   {
      int shift = 1;
      ExtMapBuffer1[i+2-shift] = 0;
      ExtMapBuffer2[i+2-shift] = 0;
      // upper
      if (High[i+1-shift]<High[i+2-shift])
      {
         if (High[i+2-shift]> High[i+3-shift]) ExtMapBuffer1[i+2-shift] = High[i+2-shift];
         if (High[i+2-shift]==High[i+3-shift] && High[i+3-shift]> High[i+4-shift]) ExtMapBuffer1[i+2-shift] = High[i+2-shift];
         if (High[i+2-shift]==High[i+3-shift] && High[i+3-shift]==High[i+4-shift] && High[i+4-shift]> High[i+5-shift]) ExtMapBuffer1[i+2-shift] = High[i+2-shift];
         if (High[i+2-shift]==High[i+3-shift] && High[i+3-shift]==High[i+4-shift] && High[i+4-shift]==High[i+5-shift] && High[i+5-shift]> High[i+6]-shift) ExtMapBuffer1[i+2-shift] = High[i+2-shift];
      }
      // lower
      if (Low[i+1-shift]>Low[i+2-shift])
      {
         if (Low[i+2-shift]< Low[i+3-shift]) ExtMapBuffer2[i+2-shift] = Low[i+2-shift];
         if (Low[i+2-shift]==Low[i+3-shift] && Low[i+3-shift]< Low[i+4-shift]) ExtMapBuffer2[i+2-shift] = Low[i+2-shift];
         if (Low[i+2-shift]==Low[i+3-shift] && Low[i+3-shift]==Low[i+4-shift] && Low[i+4-shift]< Low[i+5-shift]) ExtMapBuffer2[i+2-shift] = Low[i+2-shift];
         if (Low[i+2-shift]==Low[i+3-shift] && Low[i+3-shift]==Low[i+4-shift] && Low[i+4-shift]==Low[i+5-shift] && Low[i+5-shift]< Low[i+6-shift]) ExtMapBuffer2[i+2-shift] = Low[i+2-shift];
      }
   }
pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Fx.Player
Bywalec
Bywalec
Posty: 9
Rejestracja: 29 lut 2012, 03:11

Nieprzeczytany post autor: Fx.Player »

Panie Andrzeju, jest Pan porządnym człowiekiem ;) Personov zresztą też ;) Dziękuję i pozdrawiam :)

diodak23
Bywalec
Bywalec
Posty: 5
Rejestracja: 07 gru 2011, 12:25

Nieprzeczytany post autor: diodak23 »

Hej. Mam pytanko:
Jeśli mam zlecenie oczekujące i po jakimś czasie cena dochodzi do poziomu, że to zlecenie startuje. To jak to sprawdzić programistycznie?

Czyli kiedy wiem, że zlecenie oczekujące wystartowało.

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

Nieprzeczytany post autor: Pierz Andrzej »

kiedt typ zlecenia zmiania sie z np BUYSTOP lub BUYLIMIT na BUY

pozdrawiam
Andrzej Piez
z poważaniem
Andrzej Pierz
FOREX-SERVICE

gooral87
Stały bywalec
Stały bywalec
Posty: 28
Rejestracja: 07 paź 2010, 14:59

Nieprzeczytany post autor: gooral87 »

witam,

mam prośbę, czy ktoś mógłby sprawdzić mój do bólu prosty i niedoskonały EA na podstawie wskaźnika CCfp dla EURUSD. Założeniem jest że automacik wchodzi o pozycje BUY gdy CCfp przetnie poziom -0.0002 od dołu ku górze, Sell przecięcie poziomu 0.0002 od góry na dół.

Mam problem z testowaniem tego i faktycznie przeczytałem że backtesty z tym wskaźnikiem nie wychodzą.

będę wdzięczny za pomoc. kod poniżej:
extern double Lotsbaza=0.01;
extern double TakeProfitbaza=15;
extern double StopLossbaza=15;
extern int MA_Method = 3;
extern int Price = 6;
extern int Fast = 3;
extern int Slow = 5;
extern int HMA_Period1=14;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double hmakrotka1, hmakrotka2, hmadluga1, hmadluga2, ccicur, cciprev, volume, mcgin1, EUR, EUR1;
int total=OrdersTotal();
int ticket=OrderTicket();


mcgin1 = iCustom(NULL,0, "McGinley Dynamic Indicator", HMA_Period1,1,0);

EUR = iCustom(NULL, 0, "CCFp2", MA_Method, Price, Fast, Slow, 8, 0);
EUR1 = iCustom(NULL, 0, "CCFp2", MA_Method, Price, Fast, Slow, 8, 1);
hmakrotka1 = iCustom(NULL,0, "HMA_Color", HMA_Period1,3,0);


volume = iVolume(NULL,0,1);
//----

if(OrdersTotal()==0 &&Hour()>9&&Hour()<21&& EUR>-0.0002 && EUR1<-0.0002 )
{ticket=(OrderSend(Symbol(),OP_BUY,0.01,Ask,2,Ask-StopLossbaza*Point,Ask+TakeProfitbaza*Point,0,0,0,Green));
}
if(OrdersTotal()==0 &&Hour()>9&&Hour()<21&& EUR>0.0002 && EUR1<0.0002 )
{ticket=(OrderSend(Symbol(),OP_SELL,0.01,Bid,2,Bid+StopLossbaza*Point,Ask-TakeProfitbaza*Point,0,0,0,Green));
return(0);
}
}

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

Nieprzeczytany post autor: personov »

A daj tak :

Kod: Zaznacz cały

if(OrdersTotal()==0 &&Hour()>9&&Hour()<21&& EUR>-0.0002 && EUR1<=-0.0002 ) 
{ticket=(OrderSend(Symbol(),OP_BUY,0.01,Ask,2,Ask-StopLossbaza*Point,Ask+TakeProfitbaza*Point,0,0,0,Green)); 
} 
if(OrdersTotal()==0 &&Hour()>9&&Hour()<21&& EUR<0.0002 && EUR1>=0.0002 ) 
{ticket=(OrderSend(Symbol(),OP_SELL,0.01,Bid,2,Bid+StopLossbaza*Point,Ask-TakeProfitbaza*Point,0,0,0,Green)); 
return(0); 
} 


Dodano po 3 godzinach 53 minutach:

W jaki sposób mogę uzyskać wartość przsunięcia godzinowego czasu brokera do czasu lokalnego ?

Kod: Zaznacz cały

TimeToStr(TimeLocal(),TIME_MINUTES|TIME_SECONDS) - co?
aby wyszła mi wartość np. +1 lub -2
Solą życia jest kasa.

ODPOWIEDZ