Witam,
jestem w trakcie pisania swojego drugiego robota i natrafilem na pewien problem ktorego nie jestem w stanie przeskoczyc. Przeszukalem chyba wszystkie strony zwiazane z programowaniem mql i albo nie jestem w stanie zrozumiec rozwiazania albo najzwyczajniej go nie ma. Wszystko skupia sie na prostym zalozeniu, ze chcialbym wygenerowac sygnal kupna lub sprzedazy na podstawie wskaznika slope direction line, ktory zalaczam ponizej. Jednakze sprawa sie komplikuje, poniewaz chcialbym aby sygnal ten byl generowany jedynie w momencie zmiany kierunku indykatora. Czyli moment zmiany z niebieskiego na czerwony to SELL, a moment zmiany z czerwonego na niebieski to BUY. Nie chce aby generowalo sygnal, kiedy jakas wartosc jest powyzej drugiej, poniewaz takie sygnaly beda generowane non stop, a tak jak wspomnialem chodzi jedynie o moment zmiany trendu. Tak wyglada moje rozumowanie, ktore naturalnie jest bledne bo sygnal pojawia sie non stop:
double SDL2 = iCustom(Symbol(),0,"direction line",0,1);
double SDL4 = iCustom(Symbol(),0,"direction line",1,1);
bool SignalSELL = false;
bool SignalBUY = false;
if(SDL2 > 0 && SDL2 != EMPTY_VALUE)
SignalBUY = true;
if(SDL4 > 0 && SDL4 != EMPTY_VALUE)
SignalSELL = true;
A tak wyglada rozumowanie znalezione w internecie jakiegos typka, ktore de facto tez nie chce wykonywac zalozen:
double SDL1=iCustom(Symbol(),0,"Slope Direction Line",period,method,price,0,i+1);
double SDL2=iCustom(Symbol(),0,"Slope Direction Line",period,method,price,0,i);
double SDL3=iCustom(Symbol(),0,"Slope Direction Line",period,method,price,1,i+1);
double SDL4=iCustom(Symbol(),0,"Slope Direction Line",period,method,price,1,i);
string BUY="false";
string SELL="false";
if(SDL2>0&&SDL2!=EMPTY_VALUE)BUY="true";
if(SDL4>0&&SDL4!=EMPTY_VALUE)SELL="true";
string SignalBUY="false";
string SignalSELL="false";
if(BUY=="true"/*&&MABUY=="true"*/)if(ReverseSystem)SignalSELL="true";else SignalBUY="true";
if(SELL=="true"/*&&MASELL=="true"*/)if(ReverseSystem)SignalBUY="true";else SignalSELL="true";
Domyslam sie ze chodzi o kwestie wartosci swiecy biezacej oraz swiecy poprzedniej. Jezeli swieca poprzednia byla czerwona a swieca biezaca jest niebieska to BUY. Istotne jest aby swieca biezaca byla zamknieta aby sygnal byl wiarygodny. Jednakze tak jak wspomnialem jest to dopiero drugi robot pisany przeze mnie i troche to przerasta moje mozliwosci.
Z gory dziekuje za odpowiedz i pomoc
otwieranie pozycji TYLKO przy zmianie kierunku
otwieranie pozycji TYLKO przy zmianie kierunku
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
rozwiazanie "typka" jest ok 
musisz sprwadzic czy na 1 swiecy wstecz jest kolor niebieski a na 2 swiecy wstecz jest kolor czerwony
i adekwatnie dla SELL
a ify powinny wygladac tak BUY
int i = 1;
tlumaczac na jezyk polski 
jezeli 1 swieczke temu bufor koloru niebieskiego byl wiekszy od zera i rozny od EMPTY_VALUE i dwieswieczki temu bufor koloru czerwonego byl wiekszy od zera i rozny od EMPTY_VALUE
pzdr Andrzej

musisz sprwadzic czy na 1 swiecy wstecz jest kolor niebieski a na 2 swiecy wstecz jest kolor czerwony
i adekwatnie dla SELL
a ify powinny wygladac tak BUY
int i = 1;
Kod: Zaznacz cały
if(SDL2>0&&SDL2!=EMPTY_VALUE && SDL3>0&&SDL3!=EMPTY_VALUE )BUY="true";

jezeli 1 swieczke temu bufor koloru niebieskiego byl wiekszy od zera i rozny od EMPTY_VALUE i dwieswieczki temu bufor koloru czerwonego byl wiekszy od zera i rozny od EMPTY_VALUE
pzdr Andrzej