niedziela, 30 stycznia 2011

# Przegrał 5 mln w 18 lat... i podobne

Filip ma 33 lata. W ciągu 18 lat przegrał w sumie 5 milionów złotych. Od 7 miesięcy zachowuje abstynencję i chodzi na mitingi Anonimowych Hazardzistów. Wciąż ma do spłacenia 200 tysięcy złotych długów.
[Link usunięty, klip niedostępny na YT, próba dostępu luty 2019.]

Hazard to nałóg, który wywołuje agresję i pauperyzuje społeczeństwo. Oto przykład grupy młodych ludzi uzależnionych od Poker Texas Holdem
[Link usunięty, klip niedostępny na YT, próba dostępu luty 2019.

Film nakręcony wiele lat temu, ale ciągle dobrze pasuje

WIG - historia inwestora giełdowego
Taki amatorski filmik z mojej strony. Jestem hazardzistą i straciłem już wszystko w swoim zgubnym nałogu. Podałem stronę, która może niejednokrotnie otworzyć oczy na ten problem nie jednemu przyszłemu hazardziście ale także ich rodzinom.

Zgubny nałóg-Hazard.wmv

Z kolei według danych InfoMonitora, łączne zadłużenie mieszkańców Mazowsza wynosi 4,4 mld zł. "Krajowym rekordzistą dłużnikiem jest właśnie mieszkaniec Mazowsza, a dokładnie Piaseczna. Jego zobowiązania opiewają na astronomiczną kwotę blisko 95 mln zł" - mówi rzeczniczka InfoMonitora Lidia Roman. Jak dodaje, kwota przez ostatnie trzy miesiące wzrosła o 4,75 mln zł.
Co ciekawe, nie jest to przedsiębiorca, tylko osoba prywatna, która w długi wpadła grając na giełdzie - stwierdza gazeta.
[Źródło: Link usunięty, strona nie istnieje, próba dostępu luty 2019.]

# 20 pytań - czy dopadł mnie hazard na Forexie?

7 pytań na tak
  • Czy kiedykolwiek traciłeś czas przeznaczony na pracę lub szkołę z powodu hazardu?
  • Czy uprawianie hazardu powodowało kiedykolwiek, że twoje życie rodzinne stawało się nieszczęśliwe?
  • Czy hazard wpływał na twoją reputację?
  • Czy kiedykolwiek odczuwałeś wyrzuty sumienia po grze?
  • Czy kiedykolwiek uprawiałeś hazard, aby zdobyć pieniądze na spłatę długów albo by rozwiązać finansowe trudności?
  • Czy uprawianie hazardu powodowało zmniejszenie się twojej ambicji lub skuteczności?
  • Czy po przegranej czułeś, że musisz wrócić, tak szybko jak to możliwe, by odrobić swoje straty?
  • Czy po wygranej miałeś silny przymus, aby wrócić i wygrać więcej?
  • Czy często uprawiałeś hazard dopóki twoja ostatnia złotówka została przegrana?
  • Czy kiedykolwiek brałeś pożyczki, aby sfinansować swój hazard?
  • Czy kiedykolwiek sprzedałeś coś, aby sfinansować hazard?
  • Czy byłeś niechętny, aby użyć "hazardowych pieniędzy" na normalne wydatki?
  • Czy hazard powodował, że przestawałeś dbać o dobrobyt własny lub swojej rodziny?
  • Czy kiedykolwiek uprawiałeś hazard dłużej niż zaplanowałeś?
  • Czy kiedykolwiek grałeś, aby uciec od zmartwień i kłopotów?
  • Czy kiedykolwiek popełniłeś lub rozważałeś popełnienie nielegalnego czynu,
    aby sfinansować hazard?
  • Czy uprawianie hazardu powodowało, że masz kłopoty ze snem?
  • Czy kłótnie, rozczarowania lub frustracje wywołują w twoim wnętrzu impuls
    do hazardu?
  • Czy kiedykolwiek miałeś pragnienie, aby świętować jakieś szczęśliwe wydarzenia poprzez uprawianie hazardu przez kilka godzin?
  • Czy kiedykolwiek brałeś pod uwagę autodestrukcję lub samobójstwo w wyniku twojego hazardu?
Większość nałogowych hazardzistów odpowiada "tak" przynajmniej na siedem z tych pytań.

Źródło: http://www.anonimowihazardzisci.org/20-pytan.html

sobota, 22 stycznia 2011

# Rosyjska ruletka - tylko dla najlepszych forexowców



Weselne zabawy

Rosyjska ruletka to dość niebezpieczna zabawa:

русская рулетка! ЧП
Dla przypomnienia za Wikipedią:

Rosyjska ruletka - gra hazardowa polegająca na przyłożeniu lufy rewolweru do własnej głowy i naciskaniu spustu broni, po wcześniejszym zakręceniu obrotowym magazynkiem (bębenkiem) broni, na zmianę z przeciwnikiem.

Od samobójstwa grę tę odróżnia prawdopodobieństwo śmierci. Teoretycznie prawdopodobieństwo śmierci przy jednym naboju w bębenku i każdorazowym zakręceniu wynosi - przy założeniu, że standardowy magazynek mieści 6 naboi, co jest najczęstszym rozwiązaniem konstrukcyjnym rewolwerów - 16,7%. Istnieje odmiana ruletki polegająca na jednokrotnym zakręceniu bębenkiem i oddawaniu strzałów, kończąca się zgonem najpóźniej w szóstej partii. Grę najprawdopodobniej wymyślili carscy oficerowie (stąd nazwa).

Pojedynczy nabój w bębenku zmienia jego środek ciężkości. Powoduje to że rozkręcony bębenek zatrzymuje się częściej nabojem do dołu, eksponując przed lufą pustą komorę. Ta dysproporcja prawdopodobieństw występuje w każdym typie rewolweru, choć jej skala zależy od konstrukcji bębenka, masy naboju, itd. Gra ta mogła zatem pierwotnie być bardziej pokazem iluzjonistycznym: publiczność wierzy że wykonujący wystawia się na bezpośrednie ryzyko, podczas gdy dobierając odpowiedni rewolwer można znacznie zmniejszyć prawdopodobieństwo wystrzału bezpośrednio po zakręceniu.

Jak przeżyć Panie Forex

Wasza szansa na przeżycie w tej grze wynosi 16,7%, możecie ją zwiększyć posiadając dobrze naoliwiony rewolwer. Sprawdźcie ile dni "pożyjecie" rzucając raz dziennie kostką do gry i przyjmując, że "6" to komora z nabojem.

Zagrajcie teraz w podobną grę:
bierzecie 20-sto strzałowy rewolwer, ładujecie do magazynka 19 pocisków
szansa przeżycia 1:20[1]
przystawiacie i....BĘK

Co to za  gra ?
- To Forex ruletka,
który rewolwer wybierzecie jeśli położą przed Wami te dwa rewolwery?

A jednak codziennie, setki i tysiące graczy przykłada do "skroni" swoich rachunków rewolwer do Forex ruletki.

forexlover Styczeń 22, 2011, 11:55:13 am

No z pewnością coś w tym jest. Gdyby tak nie było, to wszyscy magicy od "koszenia pipsów" nie sprzedawali by tak zawzięcie szkoleń, sygnałów itp a przynajmniej nie poświęcali by na to aż tyle energii. No bo to się trochę kupy nie trzyma... Użerać się z klienta, szkolić przez całe dnie, reklamować się i tak dalej i tak dalej... i to za jedynie parę tysięcy. Czy komuś koszącemu pipsiory i kapustę w większych ilościach chciałoby się poświęcać tyle czasu i energii na zajęcie z takim małym zyskiem...

Myślę, że podobnie jak rosyjskiej ruletce na FX też chodzi o rachunek prawdopodobieństwa. Dopóki widzimy jak wkładane są kule do magazynka i potrafimy oszacować prawdopodobieństwo na podstawie szybkości obrotów magazynka z nabojami, możemy próbować. Inaczej, to zwykła, nawet nie rosyjska ruletka. Ale lekkie pieniądze to nie są, i to wyłącznie przez psychikę. Nic więcej, jedynie psychika i utrzymywanie wysokiej formy intelektualnej i emocjonalnej na wysokim poziomie przez długi czas... 

Maska Styczeń 22, 2011, 03:49:37 pm
 
Ten pierwszy koleś nie pociągnął w ogóle za spust. Dźwięk, który wydała broń przypominał manipulowanie bezpiecznikiem (mógł to zrobić tylko kciukiem). Wtedy naboju w komorze nabojowej jeszcze nie było, bo podczas przeładowywania widać wyraźnie, że żadna kulka z okienka wyrzutnika nie wyskakuje. Jednak podczas tego przeładowania (odciągnięcia zamka w tylne położenie i jego powrotu) do komory został wprowadzony nabój z magazynka. To nie był rewolwer, lecz pistolet. Po takiej akcji jak przeładowanie, prawdopodobieństwo oddania strzału w chwili naciśnięcia spustu wynosi w pistolecie 100% (chyba że amunicja jest wadliwa lub broń jest uszkodzona). Jeśli to nie był żaden trick i broń rzeczywiście wypaliła, to mamy do czynienia ze świadomym doprowadzeniem do śmierci innego człowieka...

Styczeń 22, 2011, 04:40:16 pm
 
Rzeczywiście jak dobrze się przypatrzeć to w ogóle nie pociąga za spust

...to była czeczeńska ruletka
Wesele gdzieś w okolicach Astrachania, zaproszony obywatel Czeczeni przyszedł w gości z pistoletem [2].
-----------------------------------------
[1] Autorka przyjęła, że 95% graczy na FX przegrywa.
[2] W regionie Kaukazu do tradycji należy przychodzenie mężczyzn z bronią na wesele. Strzela się na wiwat z ostrej amunicji również z broni maszynowej. W 2010 roku w Czeczeni zabroniono zwyczaju porywania Panny Młodej. W obu przypadkach prawo swoje, a tradycja swoje.

poniedziałek, 17 stycznia 2011

# Jak zmienić 12zł w 2,5 miliona pracując tylko 3 minuty dziennie na Forexie

Ale urwał


Ten tytuł to czysty copywriting. Jedynym celem jest "zbadanie" jak bardzo popularny będzie ten post. Weź udział w badaniu i podkręć licznik dodając jakiś "sensowny" komentarz. Prawdopodobnie po kilku komentarz mało kto zwróci uwagę na pierwszy post.

ale urwał... pierwsza odsłona poniżej 3 minut
Ale urwał - wersja w Rosji!

kultowe zagranie na ale urwał
Ale Urwał Oryginał!

Ale urwał! Czego na giełdzie robić nie wolno!

sobota, 15 stycznia 2011

# Lewar - dźwignia finansowa, której nie ma na Forexie

Lewar - dźwignia finansowa, której nie ma na Forexie

Czego dowiecie się ze sloganów:

Zwykle brzmią mniej więcej tak jak na pewnym forum:

DŻWIGNIA czyli LEWAR - Duża dźwignia handlowa na tym rynku - dochodząca do 200 : 1 oznacza, że depozytem w wysokości np. 500$ można kontrolować kupno lub sprzedaż walut o wartości 100.000$. Jeśli przy takim lewarze kurs zakupionej przez Ciebie waluty wzrośnie tylko o 0,5%, zysk wyniesie (0,5% z 100.000$ = 500$). Licząc od strony realnych pieniędzy - Twój zysk z zainwestowanych 500$ wyniesie więc kolejne 500$.
Brzmi interesująco? Spróbujmy ustalić, kto jest tym wspaniałym wujkiem, który wykłada brakujące 99.500$ i jeszcze pozwala Wam zarobić 500$.
 

Czego dowiecie się ze stron biur maklerskich:

Czym jest lewar? Jest to dźwignia finansowa pozwalająca nabywać (lub sprzedawać) instrumenty przy angażowaniu własnych środków stanowiących jedynie część wartości nabywanego (lub sprzedawanego) instrumentu. Przykładowo lewar 1:10 oznacza że żeby kupić akcje za 1000 PLN potrzebujemy zainwestować tylko 100 PLN, co przy wzroście kursu o 10% oznacza 100% w stosunku do inwestycji.
Cechą charakterystyczną rynku forex jest pojęcie lewarowania. Lewar pozwala kontrolować aktywa wielokrotnie większe niż wynika to z posiadanego przez inwestora depozytu zabezpieczającego. Mówiąc w skrócie lewar wykorzystywany jest do zwiększenia efektywności posiadanego majątku. W praktyce oznacza to, że 1 złotówka może pracować na inwestora jak 100. Dla przykładu przy dźwigni 100:1 i depozycie zabezpieczającym w wysokości 10.000USD inwestor może zawrzeć transakcję na nominał 1 miliona USD/PLN.
I tak dochodzimy do pojęcia dźwigni finansowej. Czy chcemy, czy nie po prostu z niej korzystamy. Wynika to z faktu, iż iż aby zawrzeć transakcję wystarczy wnieść depozyt zabezpieczający, który w niektórych przypadkach (EUR/USD) wynosi zaledwie 1 proc. wartości transakcji. W tym przypadku możliwa do uzyskania dźwignia wynosi 100:1.
 
Depozyt zabezpieczający = Wartość zlecenia * wymagany depozyt(%)* kurs pary walutowej
Realnie stałoby się tak jednak dopiero w sytuacji, kiedy wykorzystalibyśmy wszystkie posiadane środki na depozyt. Dla przykładu: mając 10.000 USD lub równowartość tej kwoty w PLN, dokonalibyśmy transakcji na 1 mln USD. W praktyce, inwestor wykorzystujący maksymalną dźwignię jest z góry na przegranej pozycji. Nawet, jeżeli przyjmiemy, iż dzienna zmienność na walutach wynosi przeciętnie 1-2 proc., to już spadek o 0,5 proc. uszczupliłby nasz portfel aż o 50 proc. Gorzej, jeżeli rynek jest bardziej zmienny. Dobra rada - korzystajmy z dźwigni z rozsądkiem. Najlepiej, jeżeli stosunek wartości transakcji do posiadanego kapitału nie przekracza 10:1, a w przypadku wysokiej zmienności na rynku 5:1.
Mechanizm dźwigni finansowej pozwala Ci wykorzystać nawet niewielkie wahania dzienne cen instrumentów finansowych do generowania znacznych zysków. Dzieje się tak dlatego że masz możliwość otwierania dużych pozycji i zabezpieczania ich depozytem o niewielkiej w stosunku do pozycji wartości. Stawki depozytu dla CFD różnią się w zależności od brokera - TMS Brokers obecnie oferuje dźwignię wielkości 10x (10% wartości pozycji musi być zabezpieczona depozytem), co oznacza że środki w wysokości 10,000 USD umożliwiają otwarcie pozycji o wartości 100,000 USD.

Źródło: http://www.tms.pl/z-rynku/poznaj-kontrakty-cfd.html

Żadne z biur nie chwali się, że jest dobrym wujkiem i dokłada Wam pieniędzy.
 

Sprawdźcie na własnych rachunkach


W programie MT4 na zakładce "Historia rachunku" przeglądam zmiany na koncie. Kurcze - cały czas "mielone" są tylko moje wpłacone pieniądze - nic się nie zmienia. Piszą, że razy 100, razy 200, a stan rachunku bez zmian - na koncie tylko moje pieniądze. Piszą "depozyt zabezpieczający", ale to przecież ciągle tylko moje wpłacone pieniądze. Kto tu kogo i co lewaruje?

Czego dowiecie się z Wikipedii:

Efekt dźwigni finansowej - jest to wzrost rentowności kapitału własnego spowodowany wzrostem zadłużenia. Wyjaśnić to można następująco: aktywa firmy (A) z definicji są równe sumie kapitałów własnych (K) oraz zobowiązaniom (Z), czyli długowi. W formie równania wygląda to A = K + Z. Natomiast dźwignię finansową można wyrazić jako stosunek A / K, który wyraża jaka część aktywów jest finansowana przez kapitał własny.

Np. A / K = 2 znaczy to że kapitał własny stanowi 50% aktywów, a 50% to dług A / K = 4 oznacza odpowiednio, że 25% aktywów finansowanych jest kapitałem własnym a reszta długiem Innymi słowy kiedy dźwignia finansowa wynosi 2, to na każdą zainwestowaną złotówkę przypadają 2 zł wartości aktywów.

Niemal każde przedsiębiorstwo stosuje dźwignię finansową co najmniej z dwóch powodów. Po pierwsze dźwignia finansowa pozwala zwiększyć wartość aktywów bez potrzeby inwestowania własnych pieniędzy; po drugie natomiast pozwala obniżyć podatek, jako że w większości państw odsetki kredytowe płacone przez przedsiębiorstwo jako koszt długu obniżają podstawę opodatkowania.

Dźwignia finansowa (ang. financial leverage) - instrument finansowy wykorzystywany przez podmioty w celu zwiększenia zyskowności. Dźwignia finansowa ma sens wtedy kiedy dofinansowując podmiot kapitałem obcym możemy liczyć na zwiększenie zysków przynajmniej w stopniu pozwalającym na spłatę kosztów pozyskania kapitału. Inaczej mówiąc podmiot osiąga korzyści z dźwigni finansowej, gdy koszt kapitałów obcych jest niższy od rentowności jego majątku.

Z przytoczonych wcześniej za Wikipedią definicji wynika, że dla zaistnienia dźwigni finansowej potrzebny jest kapitał zewnętrzny/kapitał obcy/dług.
 
Zgodnie z polskim prawem możemy go pozyskać na dwa sposoby:     

  • pożyczka - regulowana przez Kodeks Cywilny,
  • kredyt - regulowany przez Prawo Bankowe (kredytów mogą udzielać tylko bank - aby broker mógł udzielać kredytów musi być częścią banku albo współpracować z bankiem i oferować jego kredyty).
W tym miejscu rodzą się pytania:   
  • o koszt pożyczki/kredytu płaconych brokerowi,
  • sposób zabezpieczenia pożyczki/kredytu z naszej strony,
  • skąd broker ma tak duże kapitały na pożyczki/kredyty (pamiętacie z opisów wyżej - dla pozycji klienta równej 10.000zł i "lewarka" 1:100 broker będzie potrzebował 1.000.000zł wolnych środków - przykładowo kapitał zakładowy XTB to zaledwie 5.520.625zł,
  • jak duży musiałby być zwrot na kapitale klienta aby opłacalne było angażowanie kapitału brokera (odsetki bankowe jednodniowe bez ryzyka od pozycji 1.000.000zł).

Sprawdzam


Wertuję moją umowę z brokerem....szok .... nigdzie nie ma "wmontowanej" ani umowy kredytowej ani umowy pożyczki. O "automatycznie odnawialnej" formie umowy nie wspominając. A co w Waszych umowach?
 
Co o tym myśli Wasia Pupkin
 
Wasia Pupkin chociaż nie posiada głębszej wiedzy (zupełnie jak ja) zaskakuje zdrowymi chłopskimi przemyśleniami. No bo Wasia ciągnie monolog: chyba nie myślisz, że znany poważny międzynarodowy bank będzie pożyczał ogromne pieniądze małej nieznanej firmie zarejestrowanej na Cyprze czy w innym równie mało wiarygodnym miejscu. I to praktycznie bez zabezpieczenia i bez wynagrodzenia. 
 
Trudno się z tym nie zgodzić. Nawet w okresach największych baniek spekulacyjnych banki kredytowały góra w stosunku 1:10. Czyli mając na rachunku jedną akcję, bank pod jej zastaw dawał pieniądze na kolejne dziesięć. Co się działo potem z tak głupio udzielonymi kredytami np. w roku 1929 możecie sobie doczytać. Bardzo trudno uwierzyć, że dziś znajdzie się na rynku jeszcze bardziej naiwny bank oferujący kredyty z przebiciem 1:100 czy jeszcze większym pod zastaw istniejących tylko wirtualnie bliżej nieokreślonych instrumentów pochodnych.

W poprzednich krokach nie udało nam się "namierzyć" żadnego źródło dodatkowego finansowania naszego rachunku. Skoro do naszej dyspozycji cały czas pozostają tylko nasze pieniądze nie pojawiają się warunki do zadziałania dźwigni finansowej.

LEWAR W ŻADEN SPOSÓB NIE ZWIĘKSZA ILOŚCI PIENIĘDZY NA RACHUNKU
 
Tak, tak. To może Was zaskoczy, ale "lewar" jest całkowicie wirtualny. Pieniądze pochodzące z "lewarka" są równie wirtualne jak pieniądze na kontach demo. Łatwo to sprawdzicie - jedyną rzeczą na jaką jedne i drugie mogą zostać przeznaczone jest gra.
 
Forex - jak sprzedawać prawie wszystko nie mając prawie nic?
 
O co w takim razie chodzi z tym "lewarkiem" skoro do Waszej dyspozycji pozostają jedynie Wasze pieniądze? Ponownie zaglądamy do Wikipedii: Cytuj

Rynek instrumentów pochodnych pozwala na zwiększanie potencjalnych zysków wskutek efektu dźwigni finansowej. Aby zawrzeć transakcję i nabyć kontrakt terminowy nie jest wymagane posiadanie całości środków pieniężnych na jego pokrycie - w praktyce wymagane jest posiadanie jedynie depozytu o wartości 5-15% wartości kontraktu. To powoduje, że inwestor o większej skłonności do ryzyka inwestując jedynie ułamek wartości kontraktu jest w stanie osiągać zyski i straty na poziomie, jaki by miał inwestując pełną kwotę w instrumenty bazowe.

http://pl.wikipedia.org/wiki/D%C5%BAwignia_finansowa

Tłumacząc na nasze:

Zasada jest podobna jak w pokerze gdy gramy na zapałki. Umawiamy się, że stosujemy przelicznik/lewar - jedna zapałka = 1zł, ale możemy też umówić się na dowolny inny przelicznik/lewar, dajmy na to jedna zapałka = 100zł. Odmianą tego rozwiązania będzie umówienie się na maksymalną ilość stawek. Powiedzmy 1 zapałka = 1zł, ale nie można postawić więcej niż 100 zapałek. Gracz sam decyduje jak mocno "lewaruje" stawkę zakładu. Ile z puli posiadanych zapałek postawi.

Nie ma żadnego zewnętrznego finansowania - nie ma dźwigni finansowej, wszystko zależy od zdolności finansowych uczestników - posiadanych "depozytów zabezpieczających". Cała kasa jaką można wygrać i kontrolować podczas gry to suma "depozytów zabezpieczających" - nie ma innych pieniędzy. Wyczerpanie "depozytu zabezpieczającego" uczestnika powoduje zakończenie gry. Powrót do gry jest możliwy po ponownym zasileniu "depozytu zabezpieczającego". W języku forexowym będzie to "zaliczenie MC".
 
Na Forexie odbywa się to podobnie szczególnie w odniesieniu do wariantu z max. stawką - ile lotów (zapałek) postawimy. W przypadku braku "lewarka", czyli "lewarek" = 0 przykładowo 1 pips = 1zł zmiana kursu o jeden pips spowoduje zmianę rachunku o 1 zł. Gdy korzystamy z "lewarka" 1:100 zmiana o jeden pips spowoduje zmianę naszego rachunku o 100 zł. Mówiąc odwrotnie - przy "lewarku" 1:100, sto razy mniejsza zmiana kursu liczona w pipsach ma taki sam wpływ na stan naszego rachunku jak 100 razy większa zmiana kursu liczona w pipsach przy grze bez "lewarka". Wyczerpanie środków na naszym koncie powoduje zakończenie gry - MC.
 
LEWAROWANA/MNOŻONA JEST JEDYNIE STAWKA ZAKŁADU
do gry nie są wprowadzane żadne dodatkowe pieniądze
DŹWIGNIA FINANSOWA NIE ISTNIEJE
 
Chyba nie wierzysz, że ktoś sprzeda Ci dom za 1/100 jego wartości i jeszcze pozwoli zbierać czynsz ze wszystkich lokali w tym budynku. W naszym przypadku możemy jedynie mówić o wniesieniu zadatku (depozytu). Jeśli coś pójdzie nie tak nasze marzenia o domu pryskają jak bańka mydlana, a zadatek przepada. Zostajemy bez domu - nigdy nie staliśmy się jego właścicielem nawet w 1/100 - jak i zostajemy bez pieniędzy.
 
Jak zmienia się wartość pipsa?
 
Grając na Forexie nie widzimy na bieżąco z jakiego "lewarka" w odniesieniu do całości naszego rachunku korzystamy. Dla konkretnej wielkości pozycji mierzonej w lotach np. 0,1 lota wartość pipsa u danego brokera dla danego instrumentu będzie identyczna niezależnie czy będziemy mieć konto z max "lewarkiem" 1:100 czy 1:500. Funkcję "przerzutki" pełni wielkość otwieranej pozycji mierzona w lotach.
 
Przykładowo, jeśli przy "lewarku" 1:100 broker pozwoli nam w oparciu o stan naszego konta otworzyć max pozycję na 1 lot to przy "lewarku" 1:500 broker pozwoli nam przy tym samym stanie konta otworzyć max pozycję na 5 lotów. Jeden pips przy grze 1 lotem będzie miał 5x mniejszą wartość niż przy grze 5 lotami. Oczywiście nie odbywa się to za darmo, w drugim przypadku 5krotnie mniejszy ruch wyrzuci nas z rynku. Ryzyko brokera nie rośnie.
 
Musimy pamiętać aby wielkość "lewarka" odnosić do całości środków przeznaczonych na grę. Przykładowo w uproszczeniu: jeśli otwieramy pozycję za 400zł z "lewarkiem" 1:100, a całość naszych środków wynosi 40.000zł to w odniesieniu do wszystkich środków gramy 1:1 czyli bez "lewarka" (100 x 400 = 40.000). Otwierając kolejną identyczną pozycję "lewarek" wzrośnie do 1:2.

Pewnie już wiesz o co chodzi, ale....
 
Przypomnijmy:   

  • slogany mówią, że dzięki dźwigni finansowej depozytem przykładowo w wysokości 500$ można kontrolować kupno lub sprzedaż walut o wartości 100.000$ czyli czerpać pożytki od kwoty 100.000$ dysponując kapitałem własnym 500$,
  • nasze poszukiwania nie znalazły żadnego potwierdzenia prawdziwości tych słów: ani na wyciągu z rachunku ani w umowie - broker nie dokłada nam żadnych pieniędzy tym bardziej 95.500$,
  • skoro na naszym rachunku nie pojawiają się żadne dodatkowe środki finansowe tym samym nie może pojawić się żadna dźwignia finansowa
Po co w takim razie broker oferuje "lewar"?

Skoro broker nie pożycza nam żadnych pieniędzy jak również nie udziela żadnego kredytu
RYZYKO KREDYTOWE BROKERA WYNOSI ZERO
żadnych problemów ze ściągalnością, windykacją, płynnością finansową itd. zero kosztów z tych tytułów, broker nie musi posiadać żadnych środków do wspierania finansowego rachunków klientów - krótko mówiąc rozwiązanie genialne.
 
Broker pozwala klientom "umawiać" się z nim z jakiego mnożnika stawki zakładu każdy z nich indywidualnie będzie korzystał, czy wybierze 1:1 czy 1:5, a może 1:100 czy 1:500. Przykładowo zmiana o jeden pips może być warta 1zł, ale i może być warta 500zł zależnie jak dużą pozycję otworzymy. W zasadzie dla brokera jest to przy małych rachunkach bez znaczenia - działanie mnożnika jest symetryczne tak na "+" jak i "-", ryzyko dla niego nie wzrasta.
 
Co jednak dzieje się z pobieraną przez brokera prowizją - pewnym, pozbawionym ryzyka wynagrodzeniem brokera. Dla klienta prowizja ma charakter asymetryczny - zawsze jest tylko po stronie strat - podnosi ryzyko. Skoro stawka zakładu rośnie - rośnie też prowizja. Przykładowo jeśli prowizja brokera za otwarcie pozycji zwana spread'em wynosi 2 pipsy to prowizja może, zgodnie z naszym przykładem sięgać od 2zł do 1000zł zależnie od użytego przez klienta mnożnika wielkości otwartej pozycji.
 
Teraz odnieśmy płaconą brokerowi prowizję do całkowitego stanu rachunku klienta. W sytuacji gdy klient korzysta z "lewarka" wynoszącego dla całego rachunku 1:2 płaci 2x wyższą prowizję czyli tak jakby płacił prowizję od 2x większych pieniędzy niż w rzeczywistości posiada na rachunku. Krótko mówiąc broker pomnaża swoją prowizję wykorzystując środki obce czyli pieniądze klienta i w tym przypadku dźwignia finansowa działa. Klient skuszony marketingowymi zabiegami sam uruchamia dźwignię finansową, która przyśpiesza przepływ pieniędzy od klienta do brokera.
 
Jesteś jak koń na arkanie - im mocniej wierzgasz tym mocniej zaciskasz pętle.

"LEWAR" ZWIELOKROTNIA PROWIZJĘ DLA BROKERA
 
IM WYŻSZA STAWKA ZAKŁADU TYM SZYBCIEJ PIENIĄDZE PRZEPŁYWAJĄ OD CIEBIE DO BROKERA I TYM WIĘKSZY ZWROT NA KAPITALE WŁASNYM OSIĄGA BROKER.
 
Oferowanie jak najwyższych "lewarków" (możliwych stawek zakładu) jest w interesie brokera - rośnie jego pewny zysk. Dla grających zwiększanie stawki zakładu ma tylko wtedy sens gdy generalnie zarabiają, każda inna sytuacja prowadzi do jeszcze większych/szybszych strat.

 

 

 

piątek, 7 stycznia 2011

# Robot do stawiania siatki zleceń można użyć do stawiania piramid

Robot do stawiania siatki zleceń można użyć do stawiania piramid

Automat do stawiania siatki zleceń


Instrukcja oraz kod robota (EA) o nazwie "MakeGrid193" do stawiania siatki zleceń [1].

Instrukcja

Following on numerous mails, I would like to point out that this is NOT a trading system and a straight implementation of MakeGrid on any currency pair is bound to blow your account - sooner or later - unless you are very rich and patient.

Risk

As a simple exercise, try calculating the drawdown on your account for 1k lots on a 6 pip grid over a range of 3000 pips (this is typical of an annual move).
It comes out to something like 60'000 $ depending on the pair you trade. That is a lot of money for something like 300 pips a day.

Other than that, I found it to be a super tool to learn the different ways of trading grids and the variants that people in the boards were mentioning and trying.

After back and forward testing it with a lot of variants, I really changed my way of looking at grids. It is a really strange beast to trade.

Before trying this with real money, please do your maths. Your account chould be able to handle a 3000 pip drop in a few days without being near a margin call. Personally, I use 50 pip grids and count 4 - 6000 $ of Equity per currency traded per 1000 lot size. Also, watch out for rollover interest / charges as, depending on the broker, this can really mess you up. Having lots of GBP/JPY short positions is not a good idea!


What the EA does

The basic program does the following: Every few minutes ( determined by UpdateInterval ), it will calculate the first entry price at current price minus gridsize * gridsteps / 2.

ex. if we are at 1.2000, gridsize is 50, gridsteps is 12, 50 x 12 /2 = 300.
The first order would be placed at 1.2000 - .0300 = 1.1700 and the last order at 1.2300. This gives 12 orders at 50 pip intervals. Note that orders are placed at round numbers : 100, 150, 200 etc for a 50 pip grid, 10, 20, 30, 40 etc for a 10 pip grid.

Before placing orders, the EA looks to see if we either have a position or an existing order near the relevant price. By 'near' I mean within 9/10th of the grid size. i.e. for a 50 pip grid, the EA will look to see if we have an existing order or position 45pips above or 45 pips below the required price.
This looks a bit extreme but is a simple way to reduce the risk of duplicate positions.

If an order / position does not exist at the slot, it will create one (stop or limit) with the TP and SL as specified. TP is necessary, SL is optional.

There are many flage to determine whether the order should be placed. They are discussed below.

Once it has placed orders, it can do some housekeeping. For example, it can delete orders that are too far out ( in out example, orders that are more than 300pips away from the current price) so as to limit the server load. It can also delete orders after a specified number or hours.


Parameters

There are lots of different flags that allow you to test variants :

Lots - the lot size you want to trade.
GridSize - the interval between orders, in pips
GridSteps - the number of open orders the EA will try to set above and below the current price
TakeProfit - the TP in pips
StopLoss - If you want a stoploss, specify in pips. 0 means no stoploss.
wantLongs - if you want longs to be opened. ex. eur/huf, you may not want longs
wantShorts - if u want short positions opened.
- if both are true, both longs and shorts will be opened

Some people wanted to open positions only if 'with the trend' (i.e. for longs, above the current price ) and others only against the trend (i.e. if longs, only below the current price).

wantBreakout - sets orders above the price for longs and below the current price for shorts
wantCounter - sets long orders below the current price, shorts above current price.

GridMaxOpen - will make sure that no more than this number of positions is open at any one time. This is a way of limiting drawdown risk.

minFromPrice - this is the minumum distance, in pips, from the current price, that one can place a trade. For example, we only want a breakout of at least 30 pips from the current price. This can be used in conjunction with wantBreakout and wantCounter.

All the above parameters will work on ANY time frame chart and give exactly the same results. The parameters below are time frame dependent. I have mostly used them on 5 min charts but lots of people have tried on longer time frames.

It is possible to limit long orders only if they are above an EMA and shorts below. The EMA period is set by the EMAPeriod flag and the flag is limitEMA. If true, it will test this condition. The housekeeping routine will remove orders that end up on the wrong side of the EMA.

UseMACD and useOSMA are similar. If true, only longs will be placed if the MACD (OsMA) signal is above zero. All short orders will be cancelled.
The opposite is true for MACD below zero. All the MACD parameters are specifiable (fast and slow ema, signal period), including the chart time frame (timeFrame).
When either of these signals is true, it is possible to have the EA close open positions (whether gain or loss) that are on the wrong side. i.e. if MACD crosses up, all short orders are cancelled but if CloseOpenPositions is true, all short open positions are closed. The new grid is setup as a long grid.

These flage work in conjunction with wantLongs and wantShorts.
Hence it is possible to setup a grid of longs only, above the 34 EMA, above the current price plus 20 pips (minFromPrice) and only if MACD is positive.

With a bit of simple programming, you can change either of these to use your favourite index.


Future direction

I regularly add in suggestions other traders have found useful. I have not read this whole thread so if someone can summarise the variants that are needed, I may try to program them in.

However, as a good contribution to the advancement of grid trading, if someone has an effective way of limiting drawdown, I will be very happy to hear it.

Other than MACD and OsMA, I have not found that the other methods are useful in improving the system. These can limit the drawdown by up to about 50%.

In particular, I have found that any stoploss, time limit or CloseOpenPositions lead to losing strategies.

For real trading, the main direction I have moved in is trading a group of selected currency pairs. This is impossible to backtest properly on MetaTrader so I have an API as well as some custom programs and tons of tick data.


Conclusion

I hope this short tutorial on MakeGrid helps better understand how it works and the risks inherant in grid trading. If we can come up with ways to reduce drawdown, then we can have a good simple automated trading system that would be accessible to the normal retail trader.

Dream on!


Kod robota


//+------------------------------------------------------------------+
//|                                                  MakeGrid193.mq4 |
//|                                            Copyright © 2005, hdb |
//|                                       http://www.dubois1.net/hdb |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, hdb"
#property link      "http://www.dubois1.net/hdb"
//#property version      "1.93"
// DISCLAIMER ***** IMPORTANT NOTE ***** READ BEFORE USING *****
// This expert advisor can open and close real positions and hence do real trades and lose real money.
// This is not a 'trading system' but a simple robot that places trades according to fixed rules.
// The author has no pretentions as to the profitability of this system and does not suggest the use
// of this EA other than for testing purposes in demo accounts.
// Use of this system is free - but u may not resell it - and is without any garantee as to its
// suitability for any purpose.
// By using this program you implicitly acknowledge that you understand what it does and agree that
// the author bears no responsibility for any losses.
// Before using, please also check with your broker that his systems are adapted for the frequest trades
// associated with this expert.
// 1.8 changes
// made wantLongs and wantShorts into local variables. Previously, if u set UseMACD to true,
//       it did longs and shorts and simply ignored the wantLongs and wantShorts flags.
//       Now, these flags are not ignored.
// added a loop to check if there are 'illicit' open orders above or below the EMA when the limitEMA34
//       flag is used. These accumulate over time and are never removed and is due to the EMA moving.
// removed the switch instruction as they dont seem to work - replaced with if statements
// made the EMA period variable
//
// 1.9 changes - as per kind suggestions of Gideon
// Added a routine to delete orders and positions if they are older than keepOpenTimeLimit hours.
// Added OsMA as a possible filter. Acts exactly like MACD.
// Added 4 parameters for MACD or OsMA so that we can optimise
// Also cleaned up the code a bit.
// 1.92 changes by dave
// added function openPOsitions to count the number of open positions
// modified the order logic so that openPOsitions is not > GridMaxOpen
// 1.93 added long term direction indicator
// Added tradeForMinutes  - will only trade for this time then stop till EA is reset.
//
// modified by cori. Using OrderMagicNumber to identify the trades of the grid
extern int    uniqueGridMagic = 9999; // Magic number of the trades. must be unique to identify
                                       // the trades of one grid   
extern double Lots = 0.1;              //
extern double GridSize = 10;            // pips between orders - grid or mesh size
extern double GridSteps = 10;          // total number of orders to place
extern double TakeProfit = 10;         // number of ticks to take profit. normally is = grid size but u can override
extern double StopLoss = 0;            // if u want to add a stop loss. normal grids dont use stop losses
extern int    trailStop = 0;           // will trail if > 0
extern double UpdateInterval = 0.1;    // update orders every x minutes
extern bool   wantLongs = true;       // do we want long positions
extern bool   wantShorts = true;       // do we want short positions
extern bool   wantBreakout = true;    // do we want longs above price, shorts below price
extern bool   wantCounter = true;      // do we want longs below price, shorts above price
extern bool   limitEMA = false;        // do we want longs above ema only, shorts below ema only
extern int    EMAperiod = 34;          // the length of the EMA.. was previously fixed at 34
extern double GridMaxOpen = 0;         // maximum number of open positions : implemented in v1.92
extern bool   UseMACD = false;         // if true, will use macd >0 for longs only, macd <0 for shorts only
                                       // on crossover, will cancel all pending orders. Works in conjunction with wantLongs and wantShorts.
extern bool   UseOsMA = false;         // if true, will use OSMA > 0 for longs only, OSMA <0 for shorts only. used in same way as MACD.
                                       // If both UseMACD and UseOSMA atr true, OSMA is taken.
extern bool CloseOpenPositions = false;// if UseMACD, do we also close open positions with a loss?
extern bool   doHouseKeeping = true;   // this will remove long orders below the 34 ema and vv if limitEMA flag is true
extern double keepOpenTimeLimit = 0;   // in hours - if > 0, all open orders or positions will be closed after this period. fractions are permitted
extern int    emaFast = 12;            // parameters for MACD and OSMA
extern int    emaSlow = 26;            // parameters for MACD and OSMA
extern int    signalPeriod = 9;        // parameters for MACD and OSMA
extern int    timeFrame = 0;           // parameters for MACD and OSMA
extern int    minFromPrice = 0;        // minimum distance from price to place trades.
extern int    tradeForMinutes=0;       // will trade for this number of minutes after being initialised.
                                       // add/readd the EA before news and it will trade for these minutes then close out all positions at end
extern int    gridOffset = 0;          // positions are opened at price modulo GridSize and offset with this parameter.
                                       // used essentially to enter at non round numbers
// the following flags set bounds on the prices at which orders may be placed
// this code was developed for and is kindly made public by Exc_ite2

extern double longGridCenter = 0;      // defines the center point of a fixed width long grid                                      
extern double shortGridCenter = 0;     // defines the center point of a fixed width short grid                                      

extern double longGridLow = 0;         // defines the bottom of a fixed width long grid
extern double longGridHigh = 0;        // defines the top of a fixed width long grid

extern double shortGridLow = 0;         // defines the bottom of a fixed width short grid
extern double shortGridHigh = 0;        // defines the top of a fixed width short grid

extern double profitTarget = 99999;     // if > 0, will close out all positions once the $ target has been met

extern bool   suspendGrid = false;       // if set to true, will close all unfilled Orders
extern bool   shutdownGrid = false;      // if set to true, will close all orders and positions.
                                      
// modified by cori. internal variables only
string   GridName = "Grid";              // identifies the grid. allows for several co-existing grids - old variable.. shold not use any more
double   LastUpdate = 0;                 // counter used to note time of last update
double   startTime = 0;                  // counter to note trade start time.
double   closedProfit = 0;               // counts closed p&l
double   openProfit = 0;                 // counts open p&l
double   accumulatedProfit = 0;          // for back testing only
bool     haveHitTarget = false;          //  if there is a target, this flag says we have hit it
int      openLongs = 0;                  //  how many longs are open
int      openShorts = 0;                 // how many shorts are open
bool     gridActive = true;              // is the grid active
bool     gridOneShot = false;       // is this a one shot? if so, it stops after the profitTarget has been reached

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
 #property show_inputs                  // shows the parameters - thanks Slawa...   
//----
   GridName = StringConcatenate( "Grid-", Symbol(),"-",uniqueGridMagic );
   return(0);
  }
//+------------------------------------------------------------------------+
//| tests if there is an open position or order in the region of atRate    |
//|     will check for longs if checkLongs is true, else will check        |
//|     for shorts                                                         |
//+------------------------------------------------------------------------+

bool IsPosition(double atRate, double inRange, bool checkLongs )
  {
     int totalorders = OrdersTotal();
     for(int i=0;i<totalorders;i++)                                // scan all orders and positions...
      {
        OrderSelect(i, SELECT_BY_POS);
// modified by cori. Using OrderMagicNumber to identify the trades of the grid // hdb added or gridname for compatibility
        if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
         {  int type = OrderType();
            if (MathAbs( OrderOpenPrice() - atRate ) < (inRange*0.9)) // dont look for exact price but price proximity (less than gridsize) - added 0.9 because of floating point errors
              { if ( ( checkLongs && ( type == OP_BUY || type == OP_BUYLIMIT  || type == OP_BUYSTOP ) )  || (!checkLongs && ( type == OP_SELL || type == OP_SELLLIMIT  || type == OP_SELLSTOP ) ) )
                 {
                    return(true);
                 }
              }
         }
      }
   return(false);
  }

//+------------------------------------------------------------------+
//| Delete order after x hours                                     |
//+------------------------------------------------------------------+
void DeleteAfter( double xHours )    // delete pending orders or open positions after x hours
  {
  int totalorders = OrdersTotal();
  for(int i=totalorders-1;i>=0;i--)
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
// we use iTime so it works in backtesting
     if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
        {
            if (( MathAbs(iTime(Symbol(),5,0)-OrderOpenTime()) >= xHours*60*60 ) && (iTime(Symbol(),5,0)>0))
            {  bool result = false;
               //Close opened long position
               if ( OrderType() == OP_BUY )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
               //Close opened short position
               if ( OrderType() == OP_SELL )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
               //Close pending order
               if ( OrderType() > 1 ) result = OrderDelete( OrderTicket() );
           }
        }
     
  } // proc DeleteAfter()


//+------------------------------------------------------------------------+
//| cancells all pending orders                                      |
//+------------------------------------------------------------------------+

void CloseAllPendingOrders( )
  {
     int totalorders = OrdersTotal();
     for(int i=totalorders-1;i>=0;i--)                                // scan all orders and positions...
      {
        OrderSelect(i, SELECT_BY_POS);
// modified as per cori. Using OrderMagicNumber to identify the trades of the grid // hdb added or gridname for compatibility
        if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
         { 
          if ( OrderType() > 1 ) bool result = OrderDelete( OrderTicket() );
         }
      }
   return;
  }
//+------------------------------------------------------------------------+
//| cancells all pending orders    and closes open positions               |
//+------------------------------------------------------------------------+

void ClosePendingOrdersAndPositions()
{
  int totalorders = OrdersTotal();
  for(int i=totalorders-1;i>=0;i--)
 {
    OrderSelect(i, SELECT_BY_POS);
    bool result = false;
// modified by cori. Using OrderMagicNumber to identify the trades of the grid // hdb added or gridname for compatibility
    if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
     {
           //Close opened long positions
           if ( OrderType() == OP_BUY )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
           //Close opened short positions
           if ( OrderType() == OP_SELL )  result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
           //Close pending orders
           if ( OrderType() > 1 ) result = OrderDelete( OrderTicket() );
      }
  }
  return;
}

//+------------------------------------------------------------------------+
//| cancells all open orders which fall on the wrong side of the EMA                                     |
//+------------------------------------------------------------------------+

void CloseOrdersfromEMA( double theEMAValue )
  {
     int totalorders = OrdersTotal();
     for(int i=totalorders-1;i>=0;i--)                                // scan all orders and positions...
      {
        OrderSelect(i, SELECT_BY_POS);
        if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
         { 
          int type = OrderType();
          bool result = false;
//if (type > 1) Print(type,"  ",theEMAValue,"  ",OrderOpenPrice());
          if ( type == OP_BUYLIMIT && OrderOpenPrice() <= theEMAValue ) result = OrderDelete( OrderTicket() );
          if ( type == OP_BUYSTOP && OrderOpenPrice() <= theEMAValue ) result = OrderDelete( OrderTicket() );
          if ( type == OP_SELLLIMIT && OrderOpenPrice() >= theEMAValue ) result = OrderDelete( OrderTicket() );
          if ( type == OP_SELLSTOP && OrderOpenPrice() >= theEMAValue ) result = OrderDelete( OrderTicket() );
         }
      }
   return;
  }

//+------------------------------------------------------------------------+
//| counts the number of open positions                                    |
//+------------------------------------------------------------------------+

int openPositions(  )
  {  int op =0;
     int totalorders = OrdersTotal();
     for(int i=totalorders-1;i>=0;i--)                                // scan all orders and positions...
      {
        OrderSelect(i, SELECT_BY_POS);
        if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
         { 
          int type = OrderType();
          if ( type == OP_BUY ) {op=op+1;}
          if ( type == OP_SELL ) {op=op+1;}
         }
      }
   return(op);
  }

//+------------------------------------------------------------------+
//| Close on profit target                                           |
//+------------------------------------------------------------------+
void TestForProfit( int forMagic, double profittarget, bool testOpen, bool testHistory )                   // based on trailing stop code from MT site... but modified as per Hiro
  {
    if (profittarget > 0 )
     {
         closedProfit = 0;                // counts closed p&l

         if (testHistory == true) {
            int total = HistoryTotal();
            for(int i=0;i<total;i++)                                // scan all closed / cancelled transactions
              {
              OrderSelect(i, SELECT_BY_POS, MODE_HISTORY );
              if ( OrderSymbol() == Symbol() && OrderMagicNumber() == forMagic )  // only look if mygrid and symbol...
                {
                 closedProfit = closedProfit + OrderProfit();
               }
              }
          } else {
             accumulatedProfit =0;
          }
         
         openProfit = 0;                  // counts open p&l

         if (testOpen == true) {
            total = OrdersTotal();
            openLongs = 0;
            openShorts = 0;
            for(i=0;i<total;i++)                                // scan all open orders and positions
              {
              OrderSelect(i, SELECT_BY_POS );
              if ( OrderSymbol() == Symbol() && OrderMagicNumber() == forMagic )  // only look if mygrid and symbol...
                {
                  openProfit = openProfit + OrderProfit();
                  int type = OrderType();
                  if ( type == OP_BUY ) {openLongs=openLongs+1;}
                  if ( type == OP_SELL ) {openShorts=openShorts+1;}
                }
              }
           }
         if ( ( closedProfit + openProfit) >= (profittarget + accumulatedProfit) )
            {
               Print("Closing grid due to profit target");
               ClosePendingOrdersAndPositions();
               accumulatedProfit = accumulatedProfit + closedProfit + openProfit;
               haveHitTarget = true;
               if (gridOneShot==true) { gridActive = false; }
            }
     }
  }


//+------------------------------------------------------------------+
//| Trailing stop procedure                                          |
//+------------------------------------------------------------------+
void TrailIt( int byPips )                   // based on trailing stop code from MT site... thanks MT!
  {
  if (byPips >=5)
  {
  for (int i = 0; i < OrdersTotal(); i++) {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
     if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) )  // only look if mygrid and symbol...
        {
            if (OrderType() == OP_BUY) {
               //if (Bid > (OrderValue(cnt,VAL_OPENPRICE) + TrailingStop * Point)) {
               //   OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet);
               //   break;
               //}
               if (Bid - OrderOpenPrice() > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {
                  if (OrderStopLoss() < Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
                  }
               }
            } else if (OrderType() == OP_SELL) {
               if (OrderOpenPrice() - Ask > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {
                  if ((OrderStopLoss() > Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) ||
                        (OrderStopLoss() == 0)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(),
                        Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
                  }
               }
            }
        }
      }
      }

  } // proc TrailIt()


//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int    i, j,k, ticket, entermode, totalorders;
   bool   doit;
   double point, startrate, traderate, temp;
//---- setup parameters

 if ( TakeProfit <= 0 )                 //
   { TakeProfit = GridSize; }

 bool myWantLongs = wantLongs;
 bool myWantShorts = wantShorts;

//---- test if we want to shutdown or suspend
   if (suspendGrid == true) {       // close unfilled orders and then test if profit target
      CloseAllPendingOrders();
   }
   if (shutdownGrid == true) {      // close all positions and orders. then exit.. there is nothing more to do
      ClosePendingOrdersAndPositions();
      return(0);
   }
   if (haveHitTarget == true) {     // in case we hit target and there are still some open orders and positions
      ClosePendingOrdersAndPositions();
      if (gridOneShot==true) { gridActive = false; }
   }
//----
   if (gridActive == false) {       // if grid not active, do nothing.
     return(0);
   }

//----

  if (MathAbs(CurTime()-LastUpdate)> UpdateInterval*60)           // we update the first time it is called and every UpdateInterval minutes
   {
  
   if (profitTarget >0)
      {
        TestForProfit(uniqueGridMagic, profitTarget, true, false );
        if (!IsTesting()) {
            Comment(" v 1.93  "," Server time is ",TimeToStr(CurTime( )),
               "\n",
//               "\n","                  Closed p&l  = ",closedProfit,
               "\n","                  Open p&l    = ",openProfit,
//               "\n","                  Total p&l   = ",closedProfit + openProfit, 
               "\n","                  Long, Short = ",openLongs,"  ",openShorts,
               "\n","                  Net pos     = ",openLongs-openShorts,
               "\n",
               "\n","                  Balance     = ",AccountBalance(),
               "\n","                  Equity      = ",AccountEquity(),
               "\n","                  Margin      = ",AccountMargin(),
               "\n","                  Free mrg    = ",AccountFreeMargin(),
               ());
            }
      }

  
  
   LastUpdate = CurTime();
   point = MarketInfo(Symbol(),MODE_POINT);
   startrate = ( Ask + point*GridSize/2 ) / point / GridSize;    // round to a number of ticks divisible by GridSize
   k = startrate ;
   k = k * GridSize ;
   startrate = k * point - GridSize*GridSteps/2*point ;          // calculate the lowest entry point
   double myEMA=iMA(NULL,0,EMAperiod,0,MODE_EMA,PRICE_CLOSE,0);
   int currentOpen = 0;
   if ( GridMaxOpen > 0 ) {
      currentOpen = openPositions();
      if (currentOpen >= GridMaxOpen) {CloseAllPendingOrders(); }
   }
  
   if (limitEMA) { if (doHouseKeeping) CloseOrdersfromEMA(myEMA);}
   if (keepOpenTimeLimit > 0) DeleteAfter(keepOpenTimeLimit);
   if (trailStop >0) TrailIt(trailStop);
   if ( UseMACD || UseOsMA) 
     {
      if ( UseMACD )
        {
            double Trigger0=iMACD(NULL,timeFrame,emaFast,emaSlow,signalPeriod,PRICE_CLOSE,MODE_MAIN,0);
            double Trigger1=iMACD(NULL,timeFrame,emaFast,emaSlow,signalPeriod,PRICE_CLOSE,MODE_MAIN,1);
            double Trigger2=iMACD(NULL,timeFrame,emaFast,emaSlow,signalPeriod,PRICE_CLOSE,MODE_MAIN,2);
        }
      if ( UseOsMA )
        {
             Trigger0=iOsMA(NULL,timeFrame,emaFast,emaSlow,signalPeriod,PRICE_CLOSE,0);
             Trigger1=iOsMA(NULL,timeFrame,emaFast,emaSlow,signalPeriod,PRICE_CLOSE,1);
             Trigger2=iOsMA(NULL,timeFrame,emaFast,emaSlow,signalPeriod,PRICE_CLOSE,2);
        }

   
       if( (Trigger0 > 0) && (Trigger1 > 0)  &&  (Trigger2 < 0 ))     // cross up
        {
         CloseAllPendingOrders();
         if ( CloseOpenPositions == true ) { ClosePendingOrdersAndPositions(); }
        }
       if( (Trigger0<0) && (Trigger1<0)  &&  (Trigger2>0))     // cross down
        {
         CloseAllPendingOrders();
         if ( CloseOpenPositions == true ) { ClosePendingOrdersAndPositions(); }
        }
       myWantLongs = false;
       myWantShorts = false;
       if( (Trigger0>0) && (Trigger1>0)  &&  (Trigger2>0) && (wantLongs==true) )     // is well above zero
        {
         myWantLongs = true;
        }
       if( (Trigger0<0) && (Trigger1<0)  &&  (Trigger2<0) && (wantShorts== true) )     // is well below zero
        {
         myWantShorts = true;
        }
   }
   int myGridSteps = GridSteps;
   if (( GridMaxOpen > 0 ) && (currentOpen >= GridMaxOpen)) {
      myGridSteps = 0;
   }
  
    if (suspendGrid == true) {       //profit target and exit conditions tested so finished
      return(0);
   }

//   Print("Trigs ",    Trigger0,"  ",Trigger1,"  ",Trigger2,"  ",myWantLongs,"  ",myWantShorts,"  ",myGridSteps," ema ",myEMA," price ",Bid );

   //Print("start  1 ",startrate);    

   for( i=0;i<myGridSteps;i++) {

     startrate = ( Ask + point*GridSize/2 ) / point / GridSize;    // round to a number of ticks divisible by GridSize
     k = startrate ;
     k = k * GridSize ;
     startrate = k * point - GridSize*GridSteps/2*point ;          // calculate the lowest entry point
     traderate = startrate + i*point*GridSize + gridOffset*point;

     if (myWantLongs && (!limitEMA || traderate > myEMA)) {
          if (longGridCenter > point) {
               temp = GridSteps / 2;
               k = temp;
               startrate = longGridCenter - k * GridSize * point;
          }
          else {
               startrate = ( Ask + point*GridSize/2 ) / point / GridSize;    // round to a number of ticks divisible by GridSize
               k = startrate ;
               k = k * GridSize ;
               startrate = k * point - GridSize*GridSteps/2*point ;          // calculate the lowest entry point
          }

          traderate = startrate + i*point*GridSize + gridOffset*point;
          // now test if traderate within limits
          doit = true;
          if (traderate < longGridLow) {
                doit = false;
          }
          if ((traderate > longGridHigh) && (longGridHigh > point)) {
                doit = false;
          }
        
          if (( IsPosition(traderate,point*GridSize,true) == false ) && (doit == true)) {  // test if i have no open orders close to my price: if so, put one on

               double myStopLoss = 0;
               if ( StopLoss > 0 ) {
                    myStopLoss = traderate-point*StopLoss ;
               }
               if ( traderate > Ask ) {
               Print("BUY STOP",i);
                     entermode = OP_BUYSTOP;
               }
               else {
               Print("BUY LIMIT",i);
                     entermode = OP_BUYLIMIT ;
               }
               if ( ((traderate > (Ask +minFromPrice*Point) ) && (wantBreakout)) || ((traderate <= (Ask-minFromPrice*Point) ) && (wantCounter)) ) {
                     // modified by cori. Using OrderMagicNumber to identify the trades of the grid
                     ticket=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate+point*TakeProfit,GridName,uniqueGridMagic,0,Green);
               }
          }
      }
      if ( myWantShorts && (!limitEMA || traderate < myEMA)) {
          if (shortGridCenter > point) {
               temp = GridSteps / 2;
               k = temp;
               startrate = shortGridCenter - k * GridSize * point ;
          }
          else {
               startrate = ( Ask + point*GridSize/2 ) / point / GridSize;    // round to a number of ticks divisible by GridSize
               k = startrate ;
               k = k * GridSize ;
               startrate = k * point - GridSize*GridSteps/2*point ;          // calculate the lowest entry point
          }
    
          traderate = startrate + i*point*GridSize + gridOffset*point;
          // now test if traderate within limits
          doit = true;
    
          if (traderate < shortGridLow) {
              doit = false;
          }
          if ((traderate > shortGridHigh) && (shortGridHigh > point)) {
              doit = false;
          }

          if ((IsPosition(traderate,point*GridSize,false)== false ) && (doit == true)) {  // test if i have no open orders close to my price: if so, put one on
               myStopLoss = 0;
               if ( StopLoss > 0 ) {
                  myStopLoss = traderate+point*StopLoss ;
               }
               if ( traderate < Bid ) {
                  Print("SELL STOP",i);
                  entermode = OP_SELLSTOP;
               }
               else {
                  Print("SELL LIMIT",i);
                  entermode = OP_SELLLIMIT;
               }
               if ( ((traderate < (Bid -minFromPrice*Point) ) && (wantBreakout)) || ((traderate >= (Bid+minFromPrice*Point) ) && (wantCounter)) ) {
                // modified by cori. Using OrderMagicNumber to identify the trades of the grid
                ticket=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate-point*TakeProfit,GridName,uniqueGridMagic,0,Red);
               }
          }
       }
     }
   }
   return(0);
  }
//+------------------------------------------------------------------+


Temat wydzielony z:
Piramida użyta w forex konkursie BOSSY
------------------------------------------
[1] Robot napisany dla platformy MetaTrader4 (MT4), do znalezienia w popularnych wyszukiwarkach na hasło : "MakeGrid193".

Popularne posty