Hozzászólások

6 bejegyzés megtekintése - 1-6 / 6
  • Szerző
    Bejegyzés
  • Szalai Gergely
    Tag
    Bejegyzések száma: 8

    nagyon szépen köszönöm!

    ismét sokat segítettél.

    üdv: g

    Szalai Gergely
    Tag
    Bejegyzések száma: 8

    halihó!

    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

    Szalai Gergely
    Tag
    Bejegyzések száma: 8

    szia!

    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
             }
          }
       }
    Szalai Gergely
    Tag
    Bejegyzések száma: 8

    köszönöm szépen!
    ismét nagyon sokat segítettél.

    üdv: g

    Szalai Gergely
    Tag
    Bejegyzések száma: 8

    szia!

    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
                   }
                }
             }
          }
       }
    //--------------------------------------------------------------------
    Szalai Gergely
    Tag
    Bejegyzések száma: 8

    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á…

6 bejegyzés megtekintése - 1-6 / 6