otwieranie pozycji TYLKO przy zmianie kierunku

O jezykach programowania w platformach i nie tylko.
Lite
Bywalec
Bywalec
Posty: 15
Rejestracja: 01 maja 2008, 14:17

otwieranie pozycji TYLKO przy zmianie kierunku

Nieprzeczytany post autor: Lite »

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
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

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

Nieprzeczytany post autor: Pierz Andrzej »

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;

Kod: Zaznacz cały

if(SDL2>0&&SDL2!=EMPTY_VALUE  && SDL3>0&&SDL3!=EMPTY_VALUE )BUY="true";   
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

Lite
Bywalec
Bywalec
Posty: 15
Rejestracja: 01 maja 2008, 14:17

Nieprzeczytany post autor: Lite »

Bardzo dziekuje. Rzeczywiscie po przeanalizowaniu glebszym mialo to sens. Dziala;]

ODPOWIEDZ