Pozíciók darabszámának szabályozása2013-10-29T13:12:58+00:00

Radu.hu Fórum Kérdések az MQL4 programozási nyelvvel kapcsolatban Pozíciók darabszámának szabályozása

5 bejegyzés megtekintése - 1-5 / 5
  • Szerző
    Bejegyzés
  • RoBot
    Tag
    Bejegyzések száma: 26

    Hello Radu!

    A problémám a következő: a robotom olyan hibát követ el, hogy ha igaz a feltétel ami alapján kereskedik akkor addig nyitja a pozíciót amíg van szabad tőke.
    A pozícióknak adtam külön nevet és magic számot.
    A robotom több idősíkot figyel.

    Ticket_EURUSD_Buy_a_MN1=OrderSend(Symbol()….
    Ticket_EURUSD_Buy_a_W1=OrderSend(Symbol()….
    Ticket_EURUSD_Buy_a_D1=OrderSend(Symbol()….

    Tehát van, hogy pl:.Ticket_EURUSD_Buy_a_MN1 nevű pozíciómat addig nyitja folyamatosan amíg van szabad tőke.
    Hogyan lehet azt beszabályozni, hogy pl:.Ticket_EURUSD_Buy_a_MN1 nevű pozícióból csak egy legyen egészen addig amíg az be nem zár, és csak után jöhetne létre ismét majd egy Ticket_EURUSD_Buy_a_MN1 nevű pozíció.

    Az össze kereskedések számát nem szabályozhatom le egyre mert van, hogy egyszerre több pozíció más névvel és más feltételek alapján jön létre.

    if(OrdersTotal<1){
    Ticket_EURUSD_Buy_a_W1=OrderSend(Symbol()…. // ez így semmiféle képen nem jöhet szóba.

    Válaszodat előre is köszönöm!

    RoBot
    Tag
    Bejegyzések száma: 26

    for(i=0;i<=OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
    if(OrderMagicNumber()==Magic_EURUSD_buy_a_MN1)
    Ticket_EURUSD_Buy_a_MN1=true;
    else
    Ticket_EURUSD_Buy_a_MN1=false;}}
    if(Ticket_EURUSD_Buy_a_MN1==false){
    ** if(A_M5_Close-Támasz_MN1<=0.0005 && Vétel_M15==True && Eladás_M30==False && Eladás_H1==False && Vétel_H4==True && Vétel_D1==True){
    Ticket_EURUSD_Buy_a_MN1=OrderSend(Symbol(),OP_BUY,lots,Bid,Slippage,Bid-StopLoss_MN1*Point,Bid+TakeProfit_MN1*Point,Komment,Magic_EURUSD_buy_a_MN1,EURUSD_Expiration,Green);}}

    Így próbáltam megoldani, hogy ne nyitogassa folyamatosan a pozíciót, de hiába. Amíg a “**”-gal megjelölt feltétel igaz addig folyamatosan nyitja az új pozíciót. Minden új tickénél nyit egyet.

    Régebben küldtél nekem egy ilyen segítséget:
    “A kulcs az, hogy minden gyertya első tickjében fusson le a programod.

    Ezt többféleképpen el lehet érni, pl. a Bars (gyertyák száma) változását figyelve vagy az aktuális szerver idő figyelésével:

    if (Bars != Bars.Prev) {

    // Funkciók

    Bars.Prev = Bars;
    }

    if (TimeCurrent() >= NextRun) {

    // Funkciók

    NextRun = Time[0] + Period() * 60;
    }

    Az első esetben azt használjuk ki, hogy a gyertyák száma csak akkor növekszik ha egy új gyertya elkezdődött.

    A második esetben pedig azt, hogy tudjuk: a beérkező ticknél a gyertyák periodikus időbeli indulásához igazítjuk a legközelebbi futást.”

    Azóta a stratégiám változott, azért nem tudom ezt alkalmazni.

    Türelmedet előre is köszönöm!

    filewalker
    Tag
    Bejegyzések száma: 19

    Szerintem próbálj meg valami hasonlót:

       if(CountTradesByMagic(MasterMagicNumber)>0){
          if(OrderType()==OP_BUY)LongAllowed=false;
          if(OrderType()==OP_SELL)ShortAllowed=false;
          }
          
       if((EMA0>SMA0 && EMA1<=SMA1) || (EMA0<SMA0 && EMA1>=SMA1)) enddirection=true;
       
       if((CountTradesByMagic(MasterMagicNumber)==0
        || (CountTradesByMagic(MasterMagicNumber)>0 && OrderType()!=OP_BUY))
         && (signal==0 || signal==2))LongAllowed=true;
    
       if((CountTradesByMagic(MasterMagicNumber)==0
        || (CountTradesByMagic(MasterMagicNumber)>0 && OrderType()!=OP_SELL))
         && (signal==0 || signal==1))ShortAllowed=true;
    

    A signal =

    ** if(A_M5_Close-Támasz_MN1<=0.0005 && Vétel_M15==True && Eladás_M30==False && Eladás_H1==False && Vétel_H4==True && Vétel_D1==True){
    

    Az enddirection-hoz bármilyen feltételt beállíthatsz a mozgó átlagok helyett.
    Tulajdonképpen ez akadályozza meg a visszanyitást.

    if(!Ticket_EURUSD_Buy_a_MN1 && enddirection && LongAllowed){
    ** if(A_M5_Close-Támasz_MN1<=0.0005 && Vétel_M15==True && Eladás_M30==False && Eladás_H1==False && Vétel_H4==True && Vétel_D1==True){
    

    A magicnumber számláló elég egyszerü:

    
    int CountTradesByMagic(int magic) {
       int count = 0;
       for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
          OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
          if (OrderSymbol() != Symbol() || OrderMagicNumber()!=magic) continue;
          if (OrderSymbol() == Symbol() && OrderMagicNumber()==magic)
             if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
       }
       return (count);
    }
    

    Remélem tudsz kezdeni vele valamit.

    RoBot
    Tag
    Bejegyzések száma: 26

    Köszönöm a segítséget!
    Próbálkozok azzal amit írtál.
    Majd megírom mire jutottam.

    RoBot
    Tag
    Bejegyzések száma: 26

    Így sikerült megoldani:

    for(i=0;i<=OrdersTotal();i++){ 
       if(OrderSelect(i,SELECT_BY_POS)){
       if(OrderMagicNumber()==Magic_EURUSD_buy_a_H1)Buy_H1=true;}}
       if(A_M5_Close-Támasz_H1<=0.0005 && Vétel_M5==True && Vétel_M15==True && Vétel_M30==True && Vétel_H1==True && Vétel_H4==True && Eladás_D1==False){
       if(Buy_H1==false){
       Ticket_EURUSD_Buy_a_H1=OrderSend(Symbol(),OP_BUY,lots,Bid,Slippage,Bid-StopLoss_H1*Point,Bid+TakeProfit_H1*Point,Komment,Magic_EURUSD_buy_a_H1,EURUSD_Expiration,Green);}}
5 bejegyzés megtekintése - 1-5 / 5

A hozzászóláshoz jelentkezz be!

Adhatok Neked még több ingyenes tartalmat?

Értesítelek hetente megjelenő új tartalmaimról.

Hozzájárulok, hogy az adatvédelmi nyilatkozat szerint biztonságosan kezeld megadott adataimat, valamint hasznos anyagokat és egyedi ajánlatokat küldj nekem termékeiddel, szolgáltatásaiddal kapcsolatban e-mailben