Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

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

Nieprzeczytany post autor: ninjaproject »

No widzisz, jak sobie kod wkleiłem do MetaEditor, to zaraz wszystko jasne!

Kod: Zaznacz cały

double najwyzszaCena = iHigh(_Symbol,PERIOD_D1,iHighest(_Symbol,PERIOD_D1, MODE_HIGH, 10, 0));
double najnizszaCena = iLow(_Symbol, PERIOD_D1,iLowest(_Symbol, PERIOD_D1, MODE_LOW, 10, 0));
oraz proponuję tak, bo świeca 0 zawsze lata:

Kod: Zaznacz cały

double sredniaKroczaca10 = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
double sredniaKroczaca40 = iMA(_Symbol, _Period, 40, 0, MODE_SMA, PRICE_CLOSE, 1);
A ty mi powiedz jaki błąd zrobiłeś?
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

blashka
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 27 lis 2020, 18:12

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

Nieprzeczytany post autor: blashka »

Okej zmieniłem kod na ten co podałeś i działa!!! Najwyraźniej błąd był w skrypcie który miał znaleźć największą i najmniejszą świeczkę. Dzięki serdeczne za pomoc szczególnie Tobie i koledze tam z początku który też szybko odpowiedział na moje zapytanie. Robicie Panowie super robotę, ponieważ mało jest informacji na temat MQL4 w polskim internecie i dzięki takim osobom jak Wy człowiek aż chce się uczyć nowych rzeczy i rozszerzać swoje umiejętności. Gdyby nie Wasza pomoc pewnie dalej siedziałbym i zastanawiał się co dalej zrobić :D. A dzięki temu zrobiłem mojego pierwszego robota (napisanego samodzielnie, wcześniej musiałem korzystać z pomocy programistów) w życiu. Jeszcze raz wielkie dzięki i nie pierwszy nie ostatni raz pojawiłem się tutaj na forum :)

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

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

Nieprzeczytany post autor: ninjaproject »

iHighest(), iLowest() zwracają indeks swiecy, a nie wartość ceny.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

blashka
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 27 lis 2020, 18:12

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

Nieprzeczytany post autor: blashka »

A da się jakoś zrobić aby zwracało wartość ceny? Po to żeby potem dodać lub odjąć jakąś wartość do tej ceny np. jednego pipsa?.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

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

Nieprzeczytany post autor: ninjaproject »

blashka pisze:
01 gru 2020, 20:33
A da się jakoś zrobić aby zwracało wartość ceny? Po to żeby potem dodać lub odjąć jakąś wartość do tej ceny np. jednego pipsa?.
No tak jak ci zrobiłem.
Popatrz dokładnie co zrobiłem.
Porównaj z poprzednią wersją.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

grzegrzyw
Gaduła
Gaduła
Posty: 334
Rejestracja: 11 mar 2012, 19:43

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

Nieprzeczytany post autor: grzegrzyw »

Prosty podręcznik do nauki mql4, może się przydać początkującym programistom: http://naukamql.pl/mql4-dla-kazdego

blashka
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 27 lis 2020, 18:12

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

Nieprzeczytany post autor: blashka »

Jeszcze jeden kłopot. Chcę aby moja pozycja otwierała się jeden pips wyżej jeżeli chodzi o maksimum i o jeden niżej w przypadku minimum. Próbowałem to zrobić dodając do zmiennej takie polecenie:

int AddPips = 10;
if(vask>=najwyzszaCena+AddPips*Point)

Analogicznie do minimum tylko z minusem zamiast plusa. Niestety nie otwiera się żadna pozycja. Próbowałem zmienić int na double ponieważ zmienna "najwyzszaCena" jest właśnie tego typu ale również nie przyniosło to skutku. Również próbowałem zmienić samo Point na _Point. Również bez skutku, żadna pozycja nie jest otwierana. Poniżej wklejam cały kod aby nie było problemów z interpretacją:

#property strict
#property script_show_inputs

input int stopLoss = 600;
input double lots = 1.00;

void OnTick()
{
double najwyzszaCena = iHigh(_Symbol,PERIOD_D1,iHighest(_Symbol,PERIOD_D1, MODE_HIGH, 10, 0));
double najnizszaCena = iLow(_Symbol, PERIOD_D1,iLowest(_Symbol, PERIOD_D1, MODE_LOW, 10, 0));

double vask = MarketInfo(_Symbol, MODE_ASK);
double vbid = MarketInfo(_Symbol,MODE_BID);

string signal ="";

double sredniaKroczaca10 = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
double sredniaKroczaca40 = iMA(_Symbol, _Period, 40, 0, MODE_SMA, PRICE_CLOSE, 1);

int AddPips = 10;

if (vask>=najwyzszaCena+AddPips*Point && sredniaKroczaca10>sredniaKroczaca40 )
{

signal="buy";

if(DayOfWeek()==1 || DayOfWeek()==2)
CloseBuyPositions();

}

if (vbid<=najnizszaCena-AddPips*Point && sredniaKroczaca10<sredniaKroczaca40)
{

signal="sell";

if(DayOfWeek()==1 || DayOfWeek()==2)
CloseSellPositions();

}

if (signal=="buy" && OrdersTotal()==0 && DayOfWeek()==5)
int ticketBuy = OrderSend (_Symbol, OP_BUY, lots, Ask, 3, NormalizeDouble(Ask-stopLoss*_Point,Digits), 0, NULL, 0, 0, Green);

if (signal=="sell" && OrdersTotal()==0 && DayOfWeek()==5)
int ticketSell = OrderSend (_Symbol, OP_SELL, lots, Bid, 3, NormalizeDouble(Bid+stopLoss*_Point,Digits), 0, NULL, 0, 0, Red);

Comment ("Sygnał: ", signal);
}

void CloseBuyPositions()
{

for(int i=OrdersTotal()-1; i >=0; i--)
{

int selectBuyTicket = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
string CurrencyPairBuy = OrderSymbol();

if(_Symbol== CurrencyPairBuy)
if(OrderType()==OP_BUY)
{
int closeBuyTicket = OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL);
}

}
}

void CloseSellPositions()
{

for(int i=OrdersTotal()-1; i>=0; i--)
{

int selectSellTicket = OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
string CurrencyPairSell = OrderSymbol();

if(_Symbol== CurrencyPairSell)
if(OrderType()==OP_SELL)
{
int closeSellTicket = OrderClose(OrderTicket(), OrderLots(), Ask, 3, NULL);
}
}
}

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

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

Nieprzeczytany post autor: ninjaproject »

Nie ma szans.
To tylko przypadek, że ci się pozycja otworzy dokładnie po twojej żądanej cenie.
To nie jest gra komputerowa, tylko OrderSend() wysyła żądanie/zlecenie otwarcia pozycji do brokera.
Po jakiej cenie się ona zrealizuje, to zależy od szeregu czynników, z których żaden nie jest zależny od naszej woli.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

grzegrzyw
Gaduła
Gaduła
Posty: 334
Rejestracja: 11 mar 2012, 19:43

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

Nieprzeczytany post autor: grzegrzyw »

Próbowałeś w testerze, czy na rynku? Bo jeśli na rynku to warunek "DayOfWeek()==5" powoduje, że transakcja może być otwarta tylko w piątek.

blashka
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 27 lis 2020, 18:12

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

Nieprzeczytany post autor: blashka »

Próbowałem w testerze. Tak ale wcześniej kod działał bez problemu do póki nie dodam tego warunku. Co prawda jest to tylko jeden pips ale wolałbym żeby był on uwzględniony w cenie ponieważ takie są założenia strategii. Da się to zrobić z jakimś poślizgiem? Żeby starał się otworzyć jeden pips wyżej lub kilka więcej jeżeli da radę?

ODPOWIEDZ