Instalacja łączny zysk

Anonim

Wielu handlowców zdają sobie sprawę z taktyki Martingale - zwiększyła wolumen transakcji wynikająca po każdej stracie. Taka taktyka jest wygrana, ale jak zawsze ma "ale". Aby w pełni zagwarantować zysk, musisz mieć nieskończenie duże fundusze. To główna sprzeczność. Dlaczego warto próbować zwiększyć kapitał, jeśli jego rozmiar jest już nieskończony?

Niemniej jednak, w skali lokalnej, zastosowanie taktyki Martingale'a ma prawo do życia. Na przykład taka modyfikacja taktyki jako dodatku do pozycji utraty. W tym przypadku kładzie się nacisk na poprawę (redukcja długich transakcji i zwiększenie krótkoterminowych transakcji) średnią cenę otwarcia skumulowanej transakcji. W konsekwencji, aby uzyskać planowany zysk całkowity, cena nie musi wracać do poziomu zysku pierwszej pozycji. Odpowiadający nowy poziom zysku można zlokalizować znacznie bliżej aktualnej ceny niż prawdopodobieństwo jego osiągnięcia.

Głównym głowy przedsiębiorcy w zakresie stosowania takiej taktyki jest ustalenie średnią cenę transakcyjną otwarcia kilku jednokierunkowych transakcji, jak również ogólny poziom zysku, która powinna odpowiadać wartości zysku, która miała dostać nawet z otwarciem pierwszej pozycji.

Handlowiec Asystent normalny skrypt można mówić w tym przypadku, który będzie obliczyć całkowity poziom zysku jakby zysk został osiągnięty za pomocą tylko jednego transakcji.

Algorytm scenariusza wynika z jego głównej funkcji - włączenie

Int start ()

{

// - 1 - ===== ====== Uzyskiwanie informacji na temat warunków transakcji ===========

Tick = MarketInfo (symbol (), MODE_TICKSIZE); // minimalna kleszczy

TickValue = MarketInfo (symbol () MODE_TICKVALUE); // wartość teak w alyute depozytowej

Rozprzestrzenianie = ND (MarketInfo (symbol (), MODE_SPREAD) * Punkt); // aktualny spread

StopLevel = ND (MarketInfo (symbol (), MODE_STOPLEVEL) * Punkt); // zatrzymuje aktualnego poziomu

// - 1 - blok końcowy ================ =================== =====

// - 2 - ================= Validation TakeProfit ============ , jeśli (TakeProfit <= (stopLevel-Spread) / punkt)

{

Alert («TakeProfit musi być większa«(stopLevel-Spread) / Point,»punkty.");

zwrotny (0);

}

if (partie

{

Alert («Wielkość ta wartość jest zbyt mała!");

zwrotny (0);

}

// - 2 - blok końcowy ==================== ================ ====

// - 3 - ciągłe monitorowanie ================ ============== pozycji

while (! IsStopped ())

{

GetAveragePrices (); // Obliczyć średnią cenę otwarcia oraz całkowity zysk

if (BuyProfit> 0 || SellProfit> 0) // Jeżeli nie jest pozycją na bieżącym przyrządu

{

TickValue = MarketInfo (symbol () MODE_TICKVALUE); // cena kleszcz w walucie depozytowej

Rozprzestrzenianie = ND (MarketInfo (Symbol (), MODE_SPREAD) * Punkt); // aktualny spread

StopLevel = ND (MarketInfo (symbol (), MODE_STOPLEVEL) * Punkt); // stop level

SetCommonProfit (); // ustawiania poziomów wyniku na pożądanym poziomie

}

}

// - 3 - blok końcowy ============= =========== ================ powrót (0);

}

pierwszy blok

tylko zbiera informacje niezbędne - wartość rozproszenia i minimalny poziom oporu. Inną wartością wymaganą podczas uruchamiania skryptu jest koszt jednej minimalnej zmiany ceny w depozyt.Innymi słowy, jest to wartość jednego kleszcza jeden kompletny partii. Drugi zestaw

jest zaangażowany wejściowe użytkownika validate z dwóch wejściowych parametrów skryptu - TakeProfit i wiele innych. Pierwszy parametr określa liczbę punktów planowanych dochodów, a drugi - na kwotę transakcji, która jest zaplanowana do otrzymania tego dochodu. Trzeci blok

„zawiera nieskończoną pętlę”, które mogą być wciąż wypełniony przez użytkownika, gdy urządzenie jest odłączone od harmonogramu skryptowego. Ciało pętli oblicza łączny poziom zysku dla długich transakcji (BuyProfit) i krótkie (SellProfit). Funkcja ta działa GetAveragePrices. Następnym krokiem jest instalacja obliczonego poziomu zysku dla wszystkich znajdując przedmioty, co ma funkcję SetCommonProfit. GetAveragePrices funkcyjne

działa w ten sposób: void GetAveragePrices ()

{

// - 1 - ======= Znalezienie wszystkich transakcji na bieżącej instrumentu ====== =====

BuyProfit = 0; SellProfit = 0;

dwukrotnie BuyAveragePrice = 0 SellAveragePrice = 0;

podwójne BuyLots = 0 SellLots = 0;

do (int i = 0; i

if (OrderSelect (I SELECT_BY_POS))

if (OrderType () <2) // liczyć tylko pozycji

if (OrderSymbol () == symbol ()) // i tylko prąd narzędzie

if (OrderType () == OP_BUY)

{

BuyAveragePrice + = OrderOpenPrice () * OrderLots (); // Średnia otwarty cena

BuyLots + = OrderLots (); // i całkowita ilość długich pozycji dla

}

else

{

SellAveragePrice + = OrderOpenPrice () * OrderLots (); // Średnia otwarty cena

SellLots + = OrderLots (); // i całkowite krótkich pozycji

}

// - 1 - blok końcowy ============= =============== ============

// - 2 - ====== obliczenie całkowitego kosztu transakcji zamknięcia w odniesieniu do zysku docelowego ====

// ile zysku jest wymagane w walucie depozytowej

double TargetProfit = TickValue * Dużo * TakeProfit;

if

BuyProfit = BuyAveragePrice / BuyLots + Tick * (TargetProfit / (TickValue * BuyLots)) (BuyLots = 0!); (! SellLots = 0) , jeżeli

SellProfit = SellAveragePrice / SellLots - Tick * (TargetProfit / (TickValue * SellLots));

// - 2 - ================ blok końcowy ========================

}

Dalej

obliczony poziom zysku dla długoterminowych transakcji BuyProfit.Do tego średniego kursu otwarcia (stosunek BuyAveragePrice do BuyLots) dodaje wyrażenie Tick * (TargetProfit / (TickValue * BuyLots)), który analizuje w części. Więc TickValue * BuyLots - ta zmiana (fundusze kapitałowe) w walucie depozytu z każdego kleszcza. Dlatego też, jeśli dzieli się planowanemu zyskowi (TargetProfit), otrzymujemy liczbę punktów, które muszą być dodane do średniej ceny otwarcia. Podobnie, obliczany jest poziom zysku dla pozycji krótkich SellProfit.

Ostatnia uważane

funkcja SetCommonProfit void SetCommonProfit ()

{

// - 1 - ========= Znalezienie stanowisk dla bieżącego instrumentu === ============

do (int i = 0; i

if (OrderSelect (I SELECT_BY_POS))

if (OrderType () <2) // tylko brać pod uwagę pozycję

if (OrderSymbol () == Symbol ()) // a tylko prąd

// - 1 - ============== ====== Koniec ======================== blok

{

dwukrotnie TP = 0; // Jeśli 0, nie ma potrzeby zmiany

// - 2 - długie pozycje Sprawdź ============== ================ =======

if (OrderType () == OP_BUY && BuyProfit> 0) // Jeżeli poziom zysk obliczony

if (MathAbs (OrderTakeProfit () - BuyProfit)> = Tick && // inaczej obecna

BuyProfit - Cena> StopLevel) // a odległość wystarczającą do zmiany

TP = NP (BuyProfit);

// - 2 - =============== blok końcowy ========================= ====

// - 3 - ============ krótkie pozycje ======================= ==

if (OrderType () == OP_SELL && SellProfit> 0) // Jeśli poziom zysk obliczony

if (MathAbs (OrderTakeProfit () - SellProfit)> = Tick && // różni się od obecnego

Zapytaj - SellProfit> StopLevel) // a odległość wystarczającą do zmiany

TP = NP (SellProfit);

// - 3 - blok końcowy ===================== =================== ====

// - 4 - ============== zmiana pozycji TakeProfit poziom =================

if (TP> 0) // zmiana jest wymagana, jeśli nowa szybkość nie jest zero

if (WaitForTradeContext ())

if (! OrderModify (OrderTicket (), 0, OrderStopLoss (), TP, 0)) < powrót;

// - 4 - blok końcowy ===================== =================== ====

}

}

pierwszy blok

jest danych dla bieżącego urządzenia.

Drugi blok sprawdza, czy poziom zysków znalezionego długiego handlu jest zgodny z wyliczonym poziomem BuyProfit. Jeśli bieżący poziom zysku nie jest równy wyliczonemu, a bieżąca wartość oferty jest na tyle duża, z poziomu koszyka zakupów, poziom zysku z transakcji zostanie zmieniony.

Trzeci blok to kopia drugiej, z tą różnicą, że działa z krótkimi pozycjami.

Czwarty blok dotyczy bezpośrednio modyfikacji poziomu zysku, który występuje, jeśli wartość zmiennej TP nie jest równa zero.

Skrypt może być używany z jednym lub równocześnie z kilkoma parami waluty jednocześnie. Jego zadaniem jest monitorowanie poziomu zysków wszystkich otwartych pozycji. Dlatego po otwarciu innej transakcji poziom zysku może nie zostać określony. W ustawieniach skryptu wystarczy wskazać liczbę punktów zysku, które zamierzasz otrzymać (TakeProfit) oraz kwotę pierwszej transakcji (partie), z której obliczy się całkowity zysk. Należy pamiętać, że uzyskany zysk będzie nieco inny niż planowany, choć na lepsze. Wynika to z niemożliwości określenia ułamkowej liczby punktów przy ustalaniu celów każdej transakcji.

Po uruchomieniu skryptu

przedsiębiorca musi ręcznie otwierać transakcje, wskazując tylko stopień zatrzymania. Po otwarciu każdej nowej transakcji poziom zysku każdej pozycji zostanie automatycznie zmieniony przez skrypt. Pełny kod źródłowy skryptu można znaleźć tutaj.