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.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
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ć.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
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.
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!
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
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,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;
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.