Huh.krab29 pisze: ↑30 lis 2020, 16:39Tak se szedłem dzisiaj po mieście i naszło mnie takie coś. Nie wiem co te opcje binarne, ale z tego co zrozumiałem to zakładasz się czy cena będzie wyżej/niżej od momentu wejścia. Skoro za zwycięstwo płacą 90%, a za przegraną tracisz 100%, to musisz 11x wygrać na 10x przegrać, żeby wyjść na zero. Tak to rozumiem, ale ja prosty człowiek jestem. W swoim poście piszesz to samo więc zgadza nam się. Więc, jeśli dobrze to rozumiem, i można zakładać się na różne interwały? Nie tylko na D1 jak pisałeś. Więc, można zbadać statystycznie świece np. m15, m30, h1, h4 czy każdy inny interwał o jakiejś porze np. m30 o 13.30 i jeśli będzie tam przewaga w którąś stronę min. 12 na 21, to w długim statystycznie rozdaniu można w to wejść. Jeśli dobrze to rozumiem te opcje binarne. Nie ważne czy 1pips czy 100pipsów - ważny kierunek? Nie wiem co to za broker ten ducascopy, ale za tysiaka można spróbować, grając max 0,02 lotki. Jakie coś mnie dzisiaj naszło.
Uwaga: do badania świec użył bym ea z czasem uniwersalnym i drugi wariant letni/zimowy.
Dziękuję ci za pomysł, na grę. Nie wiedziałem co te opcje binarne.
Pozdrawiam
edit: piszesz o formacjach świecowych. A może można statystycznie sprawdzić, takie układy: up-up, up-down, czy trzy świece w ciągu. Jeśli pierwsza jest zielona to statystycznie jaka jest druga?
Automatyczne klasyfikowanie świec i badanie pod kątem przewidywania kolejnej świecy to...
Idąc na skróty...
Trzeba zacząć od opisania cech świecy, żeby je sklasyfikować. Np czym jest doji dla Ciebie? cena open = close, czy dać tolerację że korpus może być nie większy niż 10-20% całej świecy z knotami , żeby zwiększyć zasięg szukaych świec. Albo czym jest reversal bar, czyli np RB spadkowy wybija najpierw high poprzedniej świecy potem robi spadkowy korpus, ale czy zamyka się poniżej poprzedniej świecy czy wybija tylko low, czy low jest nad poprzednim low, czy pominąć w ogóle to i tylko sprawdzać czy korpus jest spadkowy i wybite high? Trzeba sie zastanowić czego szukasz...
Na szybko tutaj jest kod który szuka reversal barów. bez filtrowania szczegółów. Sprawdza dla BUY czy low obecne jest mniejsze od poprzedniej świecy, dla SELL czy high jest większe od poprzedniej. I czy było zawrócecenie. Strategia pauzuje gdy znajdzie, a w konsoli wypisuje wszystkie zdarzenia i zlicza win oraz loss. To takie proste podejście. Ale od czegoś takiego zaczynam. Włączam to iu wykres i patrzę na czym się zatrzymuje, potem modyfikuję dalej, dodaję kolejne warunki i sprawdzam, a potem robię dłuższy test.
context.pause() robi pausę, musisz wcisnąć play żeby szło dalej. Tutaj szuka na M15.
Kod: Zaznacz cały
package jforex;
import java.util.*;
import com.dukascopy.api.*;
public class Strategy_SzukajDoji_30112020 implements IStrategy {
private IEngine engine;
private IConsole console;
private IHistory history;
private IContext context;
private IIndicators indicators;
private IUserInterface userInterface;
public OfferSide side = OfferSide.BID;
private int shift = 0;
private int loss = 0;
private int win = 0;
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.console = context.getConsole();
this.history = context.getHistory();
this.context = context;
this.indicators = context.getIndicators();
this.userInterface = context.getUserInterface();
}
public void onAccount(IAccount account) throws JFException {
}
public void onMessage(IMessage message) throws JFException {
}
public void onStop() throws JFException {
}
public void onTick(Instrument instrument, ITick tick) throws JFException {
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
IBar curr = history.getBar(instrument, Period.FIFTEEN_MINS, side, 1);
IBar bar = history.getBar(instrument, Period.FIFTEEN_MINS, side, 2); // 1
IBar prev = history.getBar(instrument, Period.FIFTEEN_MINS, side, 3); // 2
if (period.equals(Period.FIFTEEN_MINS)) {
if (isBullBar(prev) && isReversalDOWN(bar, prev)) {
console.getWarn().println("sell signal");
if (!isBullBar(curr)) {
win++;
print("win: " + win + " loss: " + loss);
context.pause();
} else {
loss++;
}
}
if (!isBullBar(prev) && isReversalUP(bar, prev)) {
console.getInfo().println("buy signal");
if (isBullBar(curr)) {
win++;
print("win: " + win + " loss: " + loss);
context.pause();
} else {
loss++;
}
}
}
}
public boolean isReversalUP(IBar bar, IBar prev) {
boolean res = false;
if (bar.getLow() < prev.getLow()) {
if (isBullBar(bar)) {
res = true;
}
}
return res;
}
public boolean isReversalDOWN(IBar bar, IBar prev) {
boolean res = false;
if (bar.getHigh() > prev.getHigh()) {
if (!isBullBar(bar)) {
res = true;
}
}
return res;
}
/*
public boolean isDoji(IBar bar) {
boolean res = false;
double atr = bar.getHigh() - bar.getLow();
double body = 0;
if (isBullBar(bar)) {
body = bar.getClose() - bar.getOpen();
if ((body * 100)/atr <= 10) {
res = true;
}
} else {
body = bar.getOpen() - bar.getClose();
if ((body * 100)/atr <= 10) {
res = true;
}
}
print(atr + " " + body + " " + ((body * 100)/atr));
return res;
}
*/
public boolean isBullBar(IBar bar) {
return (bar.getOpen() > bar.getClose()) ? false : true;
}
public void print(Object o) {
console.getOut().println(o);
}
}