Wszystkie pytania dozwolone początkujących programistów

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

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

Nieprzeczytany post autor: ninjaproject »

blashka pisze:
02 gru 2020, 18:43
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ę?
W waruknu if(). Powinno działać.
Z tego co widzę, to napisałeś te warunki w if-ach dotyczących zamknięcia pozycji, a nie otwarcia.
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

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

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

Nieprzeczytany post autor: ninjaproject »

Kod: Zaznacz cały

if (vask>=najwyzszaCena+AddPips*Point && sredniaKroczaca10>sredniaKroczaca40 )
 {
if (OrdersTotal()==0 && DayOfWeek()==5)
int ticketBuy = OrderSend (_Symbol, OP_BUY, lots, Ask, 3, NormalizeDouble(Ask-stopLoss*_Point,Digits), 0, NULL, 0, 0, Green);
else
if(DayOfWeek()==1 || DayOfWeek()==2)
CloseBuyPositions();
 }

if (vbid<=najnizszaCena-AddPips*Point && sredniaKroczaca10<sredniaKroczaca40)
{
if (OrdersTotal()==0 && DayOfWeek()==5)
int ticketSell = OrderSend (_Symbol, OP_SELL, lots, Bid, 3, NormalizeDouble(Bid+stopLoss*_Point,Digits), 0, NULL, 0, 0, Red);
else
if(DayOfWeek()==1 || DayOfWeek()==2)
CloseSellPositions();
}

Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

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

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

Nieprzeczytany post autor: ninjaproject »

A slippage (obsunięcie), to ta 3-ka w OrderSend(), ale to w praktyce nic nie robi.
Broker i tak zastosuje obsunięcie jakie mu wyjdzie, chyba że ma ochronę przed obsunięciem, ale to wtedy zwykle na koncie się ustawia i wtedy nie otwiera pozycji jeżeli obsunięcie jest za duże.

Nie widzę przeszkód, żeby ten kod miał nie działać.
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

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

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

Nieprzeczytany post autor: blashka »

Przerobiłem kod tak jak napisałeś, skompilowałem, wrzuciłem do testera i znów nic się nie dzieje, nie otwiera żadnych pozycji, żadnych błędów w konsoli również nie wyświetla. Nie mam pojęcia co jest nie tak albo co mogę robić źle.
Ostatnio zmieniony 02 gru 2020, 20:26 przez blashka, łącznie zmieniany 1 raz.

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

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

Nieprzeczytany post autor: blashka »

A co do tego obsunięcia w OrderSend() to też właśnie próbowałem to zrobić ale tak jak napisałeś nic to nie dawało.

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

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

Nieprzeczytany post autor: blashka »

Zmniejszyłem wartość w int AddPips = 10; na int AddPips =1; i otwiera pozycję ale tylko Buy. Dla Sell zero reakcji.

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

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

Nieprzeczytany post autor: ninjaproject »

No, bo, chopie, to nie takie proste napisać EA, takie co w testerze można przetestować.
Dzisiaj jest DayOfWeek() = 3, no i tyle zapodajesz do testera.
I to fuks, że znalazł taki jeden przypadek!
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

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

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

Nieprzeczytany post autor: blashka »

Napisałem taki kod który wkleiłem na dole. Ma on otwierać pozycję gdy cena ask będzie powyżej ceny maksymalnej z dnia poprzedniego. Stop Loss ma się równać średniej wartości ceny maksymalnej i minimalnej z dnia poprzedniego. Tutaj kod działa super i bez zarzutu. Gdy dodałem OrderSend aby otwierać pozycję, w dzienniku wyrzuca mi Error 130. Czyli zbyt blisko postawiony Stop Loss lub Take Profit. Próby wymnożenia tych wartości przez 10,100, itp. kończą się tym samym Errorem. Jakieś pomysły jak to rozwiązać? Trochę szukałem w internecie na angielskich stronach i nie znalazłem żadnego sensownego rozwiązania.

#property strict
#property script_show_inputs

input double lots = 0.01;

void OnTick()

{
double najwyzszaCena = iHigh(_Symbol,PERIOD_D1,iHighest(_Symbol,PERIOD_D1, MODE_HIGH, 1, 1));
double najnizszaCena = iLow(_Symbol, PERIOD_D1,iLowest(_Symbol, PERIOD_D1, MODE_LOW, 1, 1));
double vask = MarketInfo(_Symbol, MODE_ASK);

double stopLoss = (najwyzszaCena+najnizszaCena)/2.0;
double wartosc = (najwyzszaCena-stopLoss);

if(OrdersTotal()==0 && vask>=najwyzszaCena)
int otworzPozycjeBuy = OrderSend (_Symbol, OP_BUY, lots, Ask, 3, NormalizeDouble(Ask-wartosc*_Point,Digits), NormalizeDouble(Ask+wartosc*_Point,Digits) , NULL, 0, 0, Green);

Print("Cena najwyższa = ", najwyzszaCena ," Cena najniższa = ", najnizszaCena , " Stop Loss = ", stopLoss, " Wartość Stop Loss'a = ", wartosc);

}

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

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

Nieprzeczytany post autor: ninjaproject »

Kod: Zaznacz cały

#property strict
#property script_show_inputs

input double lots = 0.01;

void OnTick()

{
double najwyzszaCena = iHigh(_Symbol,PERIOD_D1,1);            // to jest cena High z poprzedniego dnia
double najnizszaCena = iLow(_Symbol, PERIOD_D1,1);             // to jest cena Low z poprzedniego dnia
double stoplossCena = NormalizeDouble((najwyzszaCena+najnizszaCena)/2.0,Digits);           // to jest cena stoploss
double takeprofitCena = NormalizeDouble(Ask+(najwyzszaCena-stoplossCena),Digits);          // to jest cena takeprofit

if(OrdersTotal()==0 && Ask>=najwyzszaCena)
int otworzPozycjeBuy = OrderSend (_Symbol, OP_BUY, lots, Ask, 3, stoplossCena, takeprofitCena, NULL, 0, 0, Green);

Print("Cena najwyższa = "+DoubleToString(najwyzszaCena,Digits)+" Cena najniższa = "+DoubleToString(najnizszaCena,Digits)+" Stop Loss = ", DoubleToString(stoplossCena,Digits)+" TakeProfit = "+DoubleToString(takeprofitCena ,Digits));

}
Ewentualnie TP dać do input double tppoints = 300; np.
I obliczyć double takeprofitCena = Ask + tppoints * Point;
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

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

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

Nieprzeczytany post autor: blashka »

Dzięki serdeczne, teraz działa :)

ODPOWIEDZ