poniedziałek, 27 grudnia 2010

# Prosty półautomat do budowania piramidy o stałej wielkości pozycji i stałej odległości

psV Grudzień 27, 2010, 12:04:12 am -------
Prosty półautomat do budowania piramidy o stałej wielkości pozycji i stałej odległościNapisał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:
  • 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;
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");
   }
}
Piramida SELL
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");
   }
}
Grudzień 28, 2010, 10:01:44 am -------
Gra bez TP 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

Brak komentarzy:

Prześlij komentarz

Komentarze moderowane

Popularne posty