Prosba o modyfikację ruchomego stop loss'a

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
FaRa0n
Stały bywalec
Stały bywalec
Posty: 27
Rejestracja: 26 cze 2010, 16:03

Prosba o modyfikację ruchomego stop loss'a

Nieprzeczytany post autor: FaRa0n »

Witam,

chciałbym zmodyfikować poniższą funkcję, tak aby stop loss opierał się na wartościach wykresu liniowego (aby nie wskakiwał uruchamiany poprzez górne lub dolne wartości świecy), czyli uwzględniającego tylko wartości zamknięcia. W poniższej funkcji zmieniałem np. zmienna ask i bid na Close[0], niestety poniższa funkcja nadal ustawia stop loss w miejscach, które niewiele mają wspólnego z wprowadzanymi wartościami w zmiennych TS_ActivatedLevel i TS_Distance a tym co pokazuje wykres liniowy.
Bardzo proszę aby ktoś poświęcił chwilę na skorygowanie poniżej funkcji, bo kombinuję przy tym naprawdę już dość długo i nie mogę sobie z tym poradzić :-/

Tak przy okazji, jakby miał ktoś miał w swoich zbiorach funkcję trailing stopa w oparciu o wartość ATR, to byłbym wdzięczny za jej wklejenie.

Kod: Zaznacz cały

//------deklaracja zmiennych------


extern int TrailingStop = 1;
extern int TS_ActivatedLevel=15;
extern int TS_Distance=15;

// wywolanie z funkcji start
if(TrailingStop>0)MoveTrailingStop();


// -----------------------RUCHOMY STOP LOSS-------------------------
void MoveTrailingStop()
{
 int ticket = OrderTicket();
 double   bid = MarketInfo(OrderSymbol(),MODE_BID),
            ask = MarketInfo(OrderSymbol(),MODE_ASK),
            act_lev = TS_ActivatedLevel*Point,  // poziom o d którego ma działać TS
            dist = TS_Distance * Point; // -- czyli ile pipsów za ceną ma się przesuwać SL 
 int cnt,total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
   {
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

    if( (OrderType() == OP_BUY) && (bid> (OrderOpenPrice() + act_lev)) && (OrderStopLoss() < (bid - dist))) {
            if(!OrderModify(ticket, OrderOpenPrice(), bid - dist, OrderTakeProfit(), OrderExpiration(), Yellow)) {
                return(0);
            }
         } 
            if((OrderType() == OP_SELL) && (ask < (OrderOpenPrice() - act_lev)) && (OrderStopLoss() > (ask + dist))) {
            if(!OrderModify(ticket, OrderOpenPrice(), ask + dist, OrderTakeProfit(), OrderExpiration(), Blue)) {
               return(0);
            }
         } 
     }
}

Michx
Stały bywalec
Stały bywalec
Posty: 41
Rejestracja: 05 lip 2010, 10:39

Nieprzeczytany post autor: Michx »

FaRa0n pisze:W poniższej funkcji zmieniałem np. zmienna ask i bid na Close[0]
Jeżeli dobrze zrozumiałem to prędzej powinieneś zmienić na Close[1] lub Open[0].
Close[0] = obecny Bid lub Ask (nie pamiętam)
"Racja jest jak dupa, każdy ma swoją" J. Piłsudski

Awatar użytkownika
FaRa0n
Stały bywalec
Stały bywalec
Posty: 27
Rejestracja: 26 cze 2010, 16:03

Nieprzeczytany post autor: FaRa0n »

Bardzo dziękuję Ci Michx za naprowadzenie, teraz działa tak jak chciałem :)

ODPOWIEDZ