Hozzászólások
-
SzerzőBejegyzés
-
Hozzászólás: Függő megbízások módosítása #2697
nagyon szépen köszönöm!
ismét sokat segítettél.
üdv: g
Hozzászólás: Függő megbízások módosítása #2695halihó!
először is; köszönöm szépen a segítséget! csak pontosítanám, hogy értem-e vagy csak szeretném…
az OrderSelect(vetel, SELECT_BY_TICKET, MODE_TRADES) esetében teljesen felesleges megjelölni a MODE_TRADES konstanst, úgyis kiválasztja a Ticket szám és a SELECT_BY_TICKET konstans alapján. ha például teljesen kihagynám a konstanst, helyesen működne?
javaslatod szerint az OrderType() mellett vizsgáljam meg az OrderCloseTime() értékét is. ilyenkor elegendő egyszer alkalmazni az OrderSelect() függvényt vagy mindkettő elé külön-külön be kell iktatni a helyes működéshez?
így:
if//függő vételi megbízás törlése ( OrderSelect(vetel, SELECT_BY_TICKET, MODE_TRADES)//vételi megbízás kiválasztása && OrderType()==OP_BUYSTOP//a vételi megbízás függő (még nem nyílt meg) && OrderCloseTime()==0//még nem záródott be a megbízás )
vagy így a helyes:
if//függő vételi megbízás törlése ( OrderSelect(vetel, SELECT_BY_TICKET, MODE_TRADES)//vételi megbízás kiválasztása && OrderType()==OP_BUYSTOP//a vételi megbízás függő (még nem nyílt meg) && OrderSelect(vetel, SELECT_BY_TICKET, MODE_TRADES)//vételi megbízás kiválasztása && OrderCloseTime()==0//még nem záródott be a megbízás )
tehát ha futás közben első ízben elér idáig a program az OrderType() segítségével el tudom dönteni, hogy függő megbízást vagy épp egy megnyílt pozíciót jelöl a „vetel” Ticket. miután sikeresen törölte a függő megbízást, a program a további futása során újra elér idáig de akkor már az OrderType() nem ad megfelelő információt csak az OrderCloseTime() segít a dolgokon.
ha bezáródott egy függő megbízás az OrderType() megtartja a legutolsó értékét?
köszi: g
Hozzászólás: Függő megbízások módosítása #2666szia!
lenne még egy kérdésem a függő megbízásokkal kapcsolatban. a módosításokon túl, ha törölni szeretném. és először kiválasztom és megvizsgálom, hogy függő-e még. majd utána megpróbálom törölni. amit rendre szépen meg is tesz. de sajnos a következő lefutásnál, ismét beleszalad. azaz az OrderSelect(vetel, SELECT_BY_TICKET, MODE_TRADES) és az OrderType() függvények arra az eredményre jutnak, hogy még van él ezen a ticket számon függő vételi megbízás.
utána már csak szerencsétlen OrderDelete(vetel, Green) esik bele állandóan a for-ciklusban a 4108 „invalid ticket” kóddal jelölt hibába. mivel akkor már nincs ilyen ticket számon order.
ha törölte a szerver az függő megbízást, miért nem azt az információt kapom vissza az OrderSelect() és OrderType() vizsgálata után?
vagy teljesen rosszul használom ezt a két függvényt?if//függő vételi megbízás törlése ( OrderSelect(vetel, SELECT_BY_TICKET, MODE_TRADES)//vételi megbízás kiválasztása && OrderType()==OP_BUYSTOP//a vételi megbízás függő (még nem nyílt meg) ) { for//10szer próbálja meg törölni a függő vételi megbízást ( i=1; i<=10; i++ ) { if ( OrderDelete(vetel, Green)//vételi függő megbízás törlése ) { break;//törölte a szerver a függő vételi megbízást, ciklus megszakítása } else//hibakód vizsgálata { hibakod=GetLastError();//a hibakód tárolása Print("A függő vételi megbízás törlésénél a ", hibakod, "-as kódú hiba lépett fel!");//hibakód kiírása } } }
Hozzászólás: Függő megbízások módosítása #2662köszönöm szépen!
ismét nagyon sokat segítettél.üdv: g
Hozzászólás: Függő megbízások módosítása #2639szia!
először is köszönöm szépen a gyors választ, sokat segítettél! mint ahogy lenni szokott, így most is a hiba „user error”-ra vezethető vissza.
a 51-es számba nem vagyok beleszerelmesedve ezt természetesen majd változtatni szeretném.
megpróbáltam megoldani, hogy figyelje az árfolyam változását és csak akkor módosítgasson ha az a feltételek szerint változik. így megszűnt a végtelen ciklus. köszönöm! szerinted egy számláló beiktatása; mondjuk 10 próbálgatás után hagyja az egészet és fusson tovább, helyes irányba lendítené a dolgot?még egy kérdés, a hibakódokkal kapcsolatban:
találtam egy ErrorDescription() függvényhez hasonló akármit az http://docs.mql4.com/check/GetLastError oldalon. ez használható ahogy ott jelezték. mert nekem nem sikerült.köszi!
bemásolom a változtatott sorokat (lehet, hogy nem azt csináltam, amit leírtam)…//függő megbízások elhelyezése---------------------------------------- if ( vetel==0//még nem helyeztük el a függő vételi megbízást && eladas==0//még nem helyeztük el a függő eladási megbízást ) { //függő megbízások elhelyezése while//vételi függő megbízás küldése ( vetel<1//amíg a vételi függő megbízást el nem helyezi a szerver ) { //tervezett kereskedési szintek meghatározása nyitasszint_tervezett_vetel=High[0]+(MarketInfo(Symbol(), MODE_SPREAD)+51)*Point;//vételi pozíció tervezett nyitásszintje vesztesegszint_tervezett_vetel=High[0]+(MarketInfo(Symbol(), MODE_SPREAD)+51-kockazat)*Point;//vételi pozíció tervezett veszteségszintje nyeresegszint_tervezett_vetel=High[0]+(MarketInfo(Symbol(), MODE_SPREAD)+51+nyeresegcel)*Point;//vételi pozíció tervezett nyereségszintje vetel=OrderSend(Symbol(), OP_BUYSTOP, LOT, nyitasszint_tervezett_vetel, 25, vesztesegszint_tervezett_vetel, nyeresegszint_tervezett_vetel, "vetel", 1, 0, Green);//függő vételi megbízás küldése if//hibakód vizsgálata ( vetel<1//nem helyezte el a szerver a függő vételi megbízást ) { Print(GetLastError() ,"-as hibakód: ");//hibakód kiírása } } while//eladási függő megbízás küldése ( eladas<1//amíg az eladási függő megbízást el nem helyezi a szerver ) { //tervezett kereskedési szintek meghatározása nyitasszint_tervezett_eladas=Low[0]-51*Point;//eladási pozíció tervezett nyitásszintje vesztesegszint_tervezett_eladas=Low[0]-(51-kockazat)*Point;//eladási pozíció tervezett veszteségszintje nyeresegszint_tervezett_eladas=Low[0]-(51+nyeresegcel)*Point;//eladási pozíció tervezett nyereségszintje eladas=OrderSend(Symbol(), OP_SELLSTOP, LOT, nyitasszint_tervezett_eladas, 25, vesztesegszint_tervezett_eladas, nyeresegszint_tervezett_eladas, "eladas", 2, 0, Red);//függő eladási megbízás küldése if//hibakód vizsgálata ( eladas<1//nem helyezte el a szerver a függő vételi megbízást ) { Print(GetLastError() ,"-as hibakód: ");//hibakód kiírása } } } //-------------------------------------------------------------------- //függő megbízások módosítása----------------------------------------- if ( vetel>0//él a függő vételi megbízást ) { OrderSelect(vetel, SELECT_BY_TICKET, MODE_TRADES);//vételi megbízás kiválasztása if//vételi megbízás vizsgálata ( OrderType()==OP_BUYSTOP//a vételi megbízás függő (nem nyílt még meg) ) { if//kereskedési szintek változásának vizsgálata ( nyitasszint_tervezett_vetel<High[0]+(MarketInfo(Symbol(), MODE_SPREAD)+51)*Point//emelkedett a tervezett nyitási szint ) { frissites_megbizas_vetel=false;//még nem frissítettük a vételi függő megbízás kereskedési szintjeit while//amíg a vételi függő megbízást nem módosítja a szerver ( frissites_megbizas_vetel==false//ha még nem frissültek a függő vételi megbízás a kereskedési szintjei ) { //tervezett kereskedési szintek frissítése nyitasszint_tervezett_vetel=High[0]+(MarketInfo(Symbol(), MODE_SPREAD)+51)*Point;//vételi pozíció új tervezett nyitásszintje vesztesegszint_tervezett_vetel=High[0]+(MarketInfo(Symbol(), MODE_SPREAD)+51-kockazat)*Point;//vételi pozíció új tervezett veszteségszintje nyeresegszint_tervezett_vetel=High[0]+(MarketInfo(Symbol(), MODE_SPREAD)+51+nyeresegcel)*Point;//vételi pozíció új tervezett nyereségszintje frissites_megbizas_vetel=OrderModify(vetel, nyitasszint_tervezett_vetel, vesztesegszint_tervezett_vetel, nyeresegszint_tervezett_vetel, 0, Green);//vételi függő megbízás módosítása if//hibakód vizsgálata ( !frissites_megbizas_vetel//nem teljesült a függő vételi megbízás kereskedési szintjeinek a frissítése ) { Print(GetLastError() ,"-as hibakód: ");//hibakód kiírása } } } } } if ( eladas>0//él a függő eladási megbízást ) { OrderSelect(eladas, SELECT_BY_TICKET, MODE_TRADES);//eladási megbízás kiválasztása if//eladási megbízás vizsgálata ( OrderType()==OP_SELLSTOP//az eladási megbízás függő (nem nyílt még meg) ) { if//kereskedési szintek változásának vizsgálata ( nyitasszint_tervezett_eladas>Low[0]-51*Point//süllyedt a tervezett nyitási szint ) { frissites_megbizas_eladas=false;//még nem frissítettük az eladási függő megbízás kereskedési szintjeit while//amíg az eladási függő megbízást nem módosítja a szerver ( frissites_megbizas_eladas==false//ha még nem frissültek a függő eladási megbízás a kereskedési szintjei ) { //tervezett kereskedési szintek frissítése nyitasszint_tervezett_eladas=Low[0]-51*Point;//eladási pozíció új tervezett nyitásszintje vesztesegszint_tervezett_eladas=Low[0]-(51-kockazat)*Point;//eladási pozíció új tervezett veszteségszintje nyeresegszint_tervezett_eladas=Low[0]-(51+nyeresegcel)*Point;//eladási pozíció új tervezett nyereségszintje frissites_megbizas_eladas=OrderModify(eladas, nyitasszint_tervezett_eladas, vesztesegszint_tervezett_eladas, nyeresegszint_tervezett_eladas, 0, Red);//eladási függő megbízás módosítása if//hibakód vizsgálata ( !frissites_megbizas_eladas//nem teljesült a függő eladási megbízás kereskedési szintjeinek a frissítése ) { Print(GetLastError() ,"-as hibakód: ");//hibakód kiírása } } } } } //--------------------------------------------------------------------
Hozzászólás: Nyitott pozíció egy részének lezárása #2576Nagyon 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á… -
SzerzőBejegyzés