Forex programozás › Fórum › Kérdések az MQL4 programozási nyelvvel kapcsolatban › Nyitott pozíció egy részének lezárása
Címkézve: részzárás
-
SzerzőBejegyzés
-
Szia!
Kérlek segíts a következő probléma megoldásában:
Ha egy nyitott pozíció egy részét szeretném csak bezárni. (Amelynek az oka lehet a nyereség egy részének a védelme illetve a veszteség csökkentése.) Milyen ésszerű megoldások léteznek?
Tehát: Ha létezik egy nyitott BUY pozíció és mit tegyek ha egy általam megálmodott szinten be szeretném zárni a felét?Köszönöm a segítséget!
Az OrderClose() függvénnyel lezárod a felét! Csak annyit kell ellenőrizned, hogy a pozíció lotmérete felezhető-e. Ha nem, akkor kozmetikáznod kell az értéken.
Pl. 1.25 méretű pozíciónál nem tudsz bezárni 0.625 -öt, csak 0.62 -t vagy 0.63-at (a legtöbb brókernél; előfordulhat olyan is, hogy csak 0.6-ot vagy 0.7-et)Nagyon szépen köszönöm a gyors választ!
g
ps: nagyon tetszik az oldal! rengeteg hasznos információt találtam már. Hajrá, hajrá…Örülök, további jó olvasást! ;)
Szia!
Ezzel a témával kapcsolatban az a kérdésem hogyan lehet azt jól megoldani, hogy mondjuk egy 0.3 lotos pozíciót 3 részletben lezárni?
OrderClose()függvénnyel próbáltam megvalósítani, de vannak problémáim.
Az 1.részt 15 pipes, a 2.részt 30 pipes haszonnál akarnám lezárni. A maradék 0.1 lotot pedig a TakeProfit-ra(ami 60 pipes haszon) bíznám.
Türelmedet és válaszodat előre is köszönöm!
Annak, hogy hol történik a rész-zárás nincs jelentősége.
OrderClose -zal tudod ezt megoldani, és kizárólag piacon (tehát brókernek előre nem tudsz rész-zárásra megbízást adni).
Az OrderClose() használatáról itt olvashatsz bővebben.
Ha az utolsó (második) zárás is megtörtént, akkor beállíthatod a 60 pipes takeprofitot, és az a pozíció már a bróker által fog tudni zárulni.
Így próbáltam megoldani:
TC_1=15;
TC_2=30;// első részzárás
if(OrderOpenPrice()<=(Bid-TC_1*Point)){
OrderClose(Ticket,0.1,Bid,5,Lime);}// második részzárás
if(OrderOpenPrice()<=(Bid-TC_2*Point)){
OrderClose(Ticket,0.1,Bid,5,Blue);}Az a baj, hogy amíg igaz a feltétel addig folyamatosan zárja befelé a pozíciót 0.1 lotonként.
Úgy szeretném megoldani, hogy ha a az első részzárás feltétele igaz akkor csak egyszer zárjon be egy 0.1 lotot a pozícióból és ne többször.
Ezután jönne második részzárás.Köszönöm segítségedet!
Hello!
Ezt egyszerűen megteheted. Pozíciónként létrehozol egy globális kapcsolót. Amíg ez az egyik állapotában van addig engeded csak lezárni. Lezáráskor egy másik állapotba állítod. Majd amikor már nincs mit zárni újra alapértékre állítod.
kapcsolo_0=0;
kapcsolo_1=0;//----------------
// első részzárás
if(OrderOpenPrice()<=(Bid-TC_1*Point) && kapcsolo_0==0)
{
OrderClose(Ticket,0.1,Bid,5,Lime);
kapcsolo_0=1;
}// második részzárás
if(OrderOpenPrice()<=(Bid-TC_2*Point) && kapcsolo_1==0)
{
OrderClose(Ticket,0.1,Bid,5,Blue);
kapcsolo_1=1;
}
Remélem tudtam segíteni.
Üdv!COF258, köszönöm a választ!
A megoldásod alapnak mindenképpen jó, de egy változó is elég hozzá. Plusz arra kell figyelni, hogy ha a robot eltávolításra majd visszahelyezésre kerül, a globálisan definiált változók értékei elvesznek. Így valami más megoldást is biztosítani kell, akár logikai alapon, akár pl. a terminál globális változói segítségével.
Nagyon köszönöm a segítségeteket!
Sikerült megoldani:
if(OrderOpenPrice()<=(Bid-TC_1*Point) && 0==GlobalVariableGet(„Részzárás”)){
OrderClose(Ticket,0.1,Bid,5,Lime);
GlobalVariableSet(„Részzárás”,1);}if(OrderOpenPrice()<=(Bid-TC_2*Point) && 1==GlobalVariableGet(„Részzárás”)){
OrderClose(Ticket,0.1,Bid,5,Lime);
GlobalVariableSet(„Részzárás”,2);}if(Ticket==false){
GlobalVariableSet(„Részzárás”,0);}Alapnak jó a megoldás, de arra figyelj, hogy a GlobalVariableGet akkor is nullát ad vissza, ha a globális változó egyáltalán nem is létezik. Használd a biztonság kedvéért a GlobalVariableCheck függvényt is!
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.