psV Grudzień 27, 2010, 12:04:12 am -------
Napisałem prosty półautomat do budowania piramidy o stałej wielkości
pozycji i stałej odległości. Jest to wersja mocno niedoskonała, tak więc
można jednocześnie grać tylko na jednym instrumencie.
Budowanie siatki następuje tuż po ręcznym zakupie/sprzedaży waloru. Po tym nie należy ręcznie już nic dokładać, bo robot zacznie głupieć. Ewentualnie można wystartować zleceniem typu limit, wtedy po aktywowaniu nastąpi budowanie piramidy.
Wyjście z pozycji:
Piramida BUY
Gra bez TP
Budowanie siatki następuje tuż po ręcznym zakupie/sprzedaży waloru. Po tym nie należy ręcznie już nic dokładać, bo robot zacznie głupieć. Ewentualnie można wystartować zleceniem typu limit, wtedy po aktywowaniu nastąpi budowanie piramidy.
Wyjście z pozycji:
- EA będzie automatycznie ustawiało SL na średnioważony BE. Po zburzeniu piramidy pozostały pending order zostanie skasowany.
- Zamknięcie na zysku ręcznie wedle uznania, celowo nie ustawiam TP.
Piramida BUY
extern double Lots = 0.1;Piramida SELL
extern int Distance = 50;
double Sum, SL0, SL1 = 0;
bool Init = True;
void start()
{
// if(Init) {OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0); Init = 0;} //for testing
if(OrdersTotal()==0) return;
OpenPending();
StopLoss();
DeletePending();
}
void OpenPending()
{
OrderSelect(OrdersTotal()-1, SELECT_BY_POS);
if(OrderType()==OP_BUYSTOP) return;
OrderSend(Symbol(),OP_BUYSTOP,Lots,OrderOpenPrice()+Distance*Point,0,0,0);
}
void StopLoss()
{
if(OrdersTotal()<3) return;
for(int i=0;i<OrdersTotal()-1;i++)
{
OrderSelect(i, SELECT_BY_POS);
Sum = Sum + OrderOpenPrice();
}
SL0 = Sum/(OrdersTotal()-1);
Sum = 0;
if(SL0==SL1) return;
for(i=0;i<OrdersTotal()-1;i++)
{
OrderSelect(i, SELECT_BY_POS);
OrderModify(OrderTicket(), OrderOpenPrice(), SL0, OrderTakeProfit(), OrderExpiration());
}
SL1=SL0;
}
void DeletePending()
{
if(OrdersTotal()==1)
{
OrderSelect(0, SELECT_BY_POS);
OrderDelete(OrderTicket());
PlaySound("ok.wav");
}
}
extern double Lots = 0.1;
extern int Distance = 50;
double Sum, SL0, SL1 = 0;
bool Init = True;
void start()
{
// if(Init) {OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0); Init = 0;} //for testing
if(OrdersTotal()==0) return;
OpenPending();
StopLoss();
DeletePending();
}
void OpenPending()
{
OrderSelect(OrdersTotal()-1, SELECT_BY_POS);
if(OrderType()==OP_SELLSTOP) return;
OrderSend(Symbol(),OP_SELLSTOP,Lots,OrderOpenPrice()-Distance*Point,0,0,0);
}
void StopLoss()
{
if(OrdersTotal()<3) return;
for(int i=0;i<OrdersTotal()-1;i++)
{
OrderSelect(i, SELECT_BY_POS);
Sum = Sum + OrderOpenPrice();
}
SL0 = Sum/(OrdersTotal()-1);
Sum = 0;
if(SL0==SL1) return;
for(i=0;i<OrdersTotal()-1;i++)
{
OrderSelect(i, SELECT_BY_POS);
OrderModify(OrderTicket(), OrderOpenPrice(), SL0, OrderTakeProfit(), OrderExpiration());
}
SL1=SL0;
}
void DeletePending()
{
if(OrdersTotal()==1)
{
OrderSelect(0, SELECT_BY_POS);
OrderDelete(OrderTicket());
PlaySound("ok.wav");
}
}
Gra bez TP
Skoro nie
ustawiasz TP to może pomyśl o jakimś TS - powiedzmy zgodnym z rozstawem
zleceń czyli 50 pipsów - w przypadku niekorzystnego ruchu masz szansę coś
urwać przed BE.
Dla piramidy składającej się z 2 jednakowych zleceń możesz w uproszczeniu założyć, że minimalne TP licząc od poziomu pierwszego zlecenia powinno być nie mniejsze niż 3krotność rozstawu + 3krotność spread'u. W przypadku jeśli na 3 nieudane starty piramidy przypadnie 1 udany będziesz mógł liczyć przy takim TP na wyjście "na 0". Czyli w tym przypadku minimalny TP to jakieś 80 pipów od średnioważonego BE. W praktyce dla całego systemu uwzględniającego udane jak i nieudane piramidy tak ustawione TP będzie dopiero średnioważonym BE.
Dla piramidy 3zleceniowej wypada już przyjąć 5-6krotność rozstawu + 5-6krotoność spread'u dla poszukiwań minimalnego TP.
Dla uzyskania bardziej precyzyjnych parametrów można zamiast rozstawu przyjąć średnią stratę z nieudanych startów piramid *1,15, a spread (jako niewiadomą z pewnego obszaru zmienności) wyznaczyć dla bezpieczeństwa jako najczęściej występujący spread *1,5.
Temat wydzielony z:
Piramida użyta w forex konkursie BOSSY
Dla piramidy składającej się z 2 jednakowych zleceń możesz w uproszczeniu założyć, że minimalne TP licząc od poziomu pierwszego zlecenia powinno być nie mniejsze niż 3krotność rozstawu + 3krotność spread'u. W przypadku jeśli na 3 nieudane starty piramidy przypadnie 1 udany będziesz mógł liczyć przy takim TP na wyjście "na 0". Czyli w tym przypadku minimalny TP to jakieś 80 pipów od średnioważonego BE. W praktyce dla całego systemu uwzględniającego udane jak i nieudane piramidy tak ustawione TP będzie dopiero średnioważonym BE.
Dla piramidy 3zleceniowej wypada już przyjąć 5-6krotność rozstawu + 5-6krotoność spread'u dla poszukiwań minimalnego TP.
Dla uzyskania bardziej precyzyjnych parametrów można zamiast rozstawu przyjąć średnią stratę z nieudanych startów piramid *1,15, a spread (jako niewiadomą z pewnego obszaru zmienności) wyznaczyć dla bezpieczeństwa jako najczęściej występujący spread *1,5.
Temat wydzielony z:
Piramida użyta w forex konkursie BOSSY
Brak komentarzy:
Prześlij komentarz
Komentarze moderowane