SL na kapitale
SL na kapitale
Ja w prosty sposób w EA wstawić funkcję by ustawiał SL dla wszystkich aktualnie otwartych pozycji na określonym % depo. Dodam, że wszystkie będą na jednej parze
Re: SL na kapitale
może tak
Kod: Zaznacz cały
if( AccountEquity() / AccountBalance() < 0.5)
{
for(int i=(OrdersTotal()-1); i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()!= Symbol()) continue;
int cmd=OrderType();
if(cmd==OP_BUY){
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),5,Violet);
Sleep(100);
}
if(cmd==OP_SELL){
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),5,Violet);
Sleep(100);
}
}
}
}
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.
Re: SL na kapitale
Dzięki za od[powiedź. Ale to nie rozwiązuje problemu. Chodzi i o to by EA fizycznie ustawiał SL i po każdym nowo dodanym zleceniu przeliczał to od nowa i modyfikował SL dla wszystkich aktualnie otwartych zleceń tak by zawsze niezależnie od tego ile jest otwartych zleceń trafienie w SL kończyło się identycznym % utraty kapitału. W twoim rozwiązaniu EA zamyka sam zlecenia a przy poślizgach cenowych może nie zrobić tego w punkt. Nie uruchomi się również to zabezpieczenie w przypadku przerw w działaniu platformy.
Re: SL na kapitale
To może coś takiego?
Fakt, że chodzi o jedną parę trochę upraszcza sprawę. Uwzględniłem to, że na tej parze mogą być pozycje w różne strony, więc np. sl dla selli może być jednocześnie tp dla buyi.
Wrzucam kod całej strategii, ale jak masz otwarty kod tego EA do modyfikacji, to wystarczy wkleić wywołanie funkcji changeSL(). Najlepiej tam, gdzie EA wykonuje zlecenia, żeby wywoływała się tylko przy nowym zleceniu. W parametrach podaje się wartość jednego pipsa dla jednego lota na danej parze (w walucie rachunku oczywiście) i procent (1% = 0.01) balansu, bo jakim ma nastąpić sl. Można też podać magic, żeby brało pod uwagę pozycje z konkretnego EA.
Rozwiązanie do własnych modyfikacji oczywiście.

Fakt, że chodzi o jedną parę trochę upraszcza sprawę. Uwzględniłem to, że na tej parze mogą być pozycje w różne strony, więc np. sl dla selli może być jednocześnie tp dla buyi.
Wrzucam kod całej strategii, ale jak masz otwarty kod tego EA do modyfikacji, to wystarczy wkleić wywołanie funkcji changeSL(). Najlepiej tam, gdzie EA wykonuje zlecenia, żeby wywoływała się tylko przy nowym zleceniu. W parametrach podaje się wartość jednego pipsa dla jednego lota na danej parze (w walucie rachunku oczywiście) i procent (1% = 0.01) balansu, bo jakim ma nastąpić sl. Można też podać magic, żeby brało pod uwagę pozycje z konkretnego EA.
Rozwiązanie do własnych modyfikacji oczywiście.
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| realSL.mq4 |
//| Copyright 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//tu wartosc 1 pipsa na locie to 10 USD. SL ma być na 10% rachunku
changeSL(10,0.1);
}
//+------------------------------------------------------------------+
void changeSL(double pipValue,double percentToClose,int magic=0)
{
double totalVol = totalVolume(magic);
double pips=(AccountBalance()*percentToClose)/(pipValue*MathAbs(totalVol));
double priceToModify=0;
if(Digits()>=4)
{
pips*=0.0001;
}else{
pips*=0.01;
}
if(totalVol > 0){
priceToModify=NormalizeDouble(calcBE(magic) - pips,Digits);
}else{
priceToModify=NormalizeDouble(calcBE(magic) + pips,Digits);
}
Print(priceToModify);
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()!=magic || OrderType()>1) continue;
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice()>priceToModify)
{
if(!OrderModify(OrderTicket(),Ask,priceToModify,0,0))Print(GetLastError());
}else{
if(!OrderModify(OrderTicket(),Ask,0,priceToModify,0))Print(GetLastError());
}
}else{
if(OrderOpenPrice()>priceToModify)
{
if(!OrderModify(OrderTicket(),Ask,0,priceToModify,0))Print(GetLastError());
}else{
if(!OrderModify(OrderTicket(),Ask,priceToModify,0,0))Print(GetLastError());
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double calcBE(int magic=0)
{
double BE=0;
double priceXlots=0;
double sumLots=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()!=magic || OrderType()>1) continue;
if(OrderType()==OP_BUY)
{
priceXlots+=OrderOpenPrice()*OrderLots();
sumLots+=OrderLots();
}else{
priceXlots-=OrderOpenPrice()*OrderLots();
sumLots-=OrderLots();
}
}
}
if(sumLots!=0)
{
BE=priceXlots/sumLots;
}else{
BE=0;
}
return(BE);
}
//+------------------------------------------------------------------+
double totalVolume(int magic=0){
double vol = 0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()!=magic || OrderType()>1) continue;
if(OrderType()==OP_BUY)
{
vol+=OrderLots();
}else{
vol-=OrderLots();
}
}
}
return vol;
}
Re: SL na kapitale
Karus to o czym piszesz jest niemożliwe do zrobienia, tak jak napisał Adam. Jak niby EA ma się domyśleć, kiedy i na jakiej parze zostanie uderzone SL? A różnica w poślizgu między zamknięciem zlecenia za pomocą EA i SL jest pomijalna, chyba, że masz łącze bardzo złej jakości.
Re: SL na kapitale
Witajcie,
a gdyby napisać prosty EA, który porównuje aktualny balance z equity i jeśli equity jest niższa niż x % balansu to zamyka wszystkie pozycje ?
Czyli przykładowo:
Balance: 10.000 PLN
Equity: 8.000 PLN
ustawiona zmienna SL na 20%
EA zamyka wszystkie otwarte pozycje w momencie dojścia Equity do 8.000 PLN.
Jak myślicie ?
a gdyby napisać prosty EA, który porównuje aktualny balance z equity i jeśli equity jest niższa niż x % balansu to zamyka wszystkie pozycje ?
Czyli przykładowo:
Balance: 10.000 PLN
Equity: 8.000 PLN
ustawiona zmienna SL na 20%
EA zamyka wszystkie otwarte pozycje w momencie dojścia Equity do 8.000 PLN.
Jak myślicie ?
Re: SL na kapitale
Proste i skuteczne. Od lat tego używam.qrczaczek pisze:Witajcie,
a gdyby napisać prosty EA, który porównuje aktualny balance z equity i jeśli equity jest niższa niż x % balansu to zamyka wszystkie pozycje ?
Czyli przykładowo:
Balance: 10.000 PLN
Equity: 8.000 PLN
ustawiona zmienna SL na 20%
EA zamyka wszystkie otwarte pozycje w momencie dojścia Equity do 8.000 PLN.
Jak myślicie ?
Re: SL na kapitale
w drugim poście to jest napisaneqrczaczek pisze:Witajcie,
a gdyby napisać prosty EA, który porównuje aktualny balance z equity i jeśli equity jest niższa niż x % balansu to zamyka wszystkie pozycje ?
Czyli przykładowo:
Balance: 10.000 PLN
Equity: 8.000 PLN
ustawiona zmienna SL na 20%
EA zamyka wszystkie otwarte pozycje w momencie dojścia Equity do 8.000 PLN.
Jak myślicie ?

Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.
Re: SL na kapitale
Ja ze swojej strony potwierdzam, że rozwiązanie Mustafy jest uniwersalnie najlepsze. Właściwie, gdybym sam miał korzystać z sl na kapitale, to zrobiłbym to właśnie tak.
Ma to wiele zalet, broker nie widzi Twoich sl, rozwiązanie działa na wszystkie pary jednocześnie, jest mniej podatne na błędy itp.
Ale jak ktoś z różnych powodów potrzebuje prawdziwych sl wysyłanych na serwer, to niestety nie jest to rozwiązanie dla niego.
Ma to wiele zalet, broker nie widzi Twoich sl, rozwiązanie działa na wszystkie pary jednocześnie, jest mniej podatne na błędy itp.
Ale jak ktoś z różnych powodów potrzebuje prawdziwych sl wysyłanych na serwer, to niestety nie jest to rozwiązanie dla niego.