Wenn Wert bei X war und Y durchkreuzt

 

Hallo,


ich habe mir einen CCI EA erstellt und habe damit ein kleines Problem.

Mein Wunsch: Wenn zB. der CCI bei -120 war und -100 durchkreuzt soll ein Trade eröffnet werden.


Geschrieben ist es jetzt so wenn der CCI den Wert -100 durchkreuzt (von Unten nach Oben) wird ein Trade eröffnet.

Doch hier entsteht schon das erste Problem: Manchmal wird sogor bereits ein Trade eröffnet wenn der Wert -100 von Oben nach Unten durchkreuzt wird. (Beispiel: CCI geht von +1 auf -100 und bereits hier wird schon ein Trade eröffnet, obwohl der Trade erst eröffnen soll, wenn der CCI von zB -120 durch -100 geht)


Hier der Code für den Buy Order:

//Open Buy Order, instant signal is tested first
   RefreshRates();
   if(Cross(6, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt) //Commodity Channel Index crosses above fixed value
   && Bid > iMA(NULL, PERIOD_CURRENT, MA_Period, MA_Shift, MODE_EMA, PRICE_CLOSE, Shift) + OpenTrade_EntfernungMA * Point() //Price > Moving Average + fixed value
   )

Buy_wenn_X_durchkreuzt = wären hier die -100



Wäre für jede Hilfe dankbar! 



lg thmatzer

 
  1. Dein Code ist ziemlich unleserlich :(
  2. Du weißt ja nicht, wann und ob der CCI unter -120 war, ergo
  3. hilft zB. eine Schleife:
if ( iCCI(_Symbol, _Period, CCI_Period, PRICE_TYPICAL, 0) ) <= -100 ) {
        iCci=0;
        for(lookBack=1;lookBack<6;lookBack++) {
                vCci = iCCI(_Symbol, _Period, CCI_Period, PRICE_TYPICAL, lookBack);
                if (vCci >-100)         { iCci = -1; break; }           // Muster ist kaputt :(
                else if (vCci<=-120)    { iCci = lookBack; break; }     // Jubel! :)
        }
}

(Ungetestet!!)

Wenn jetzt iCci < 0 => kein Muster


 

Danke für die schnelle Antwort!


Leider schaff ich es einfach nicht die Schleife fehlerfrei einzufügen.

Wärst du so Nett und könntest es ergänzen? :)


Hier wäre der ganze Buy und Sell Code:

   //Open Buy Order, instant signal is tested first
   RefreshRates();
   if(Cross(6, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt) //Commodity Channel Index crosses above fixed value
   && Bid > iMA(NULL, PERIOD_CURRENT, MA_Period, MA_Shift, MODE_EMA, PRICE_CLOSE, Shift) + OpenTrade_EntfernungMA * Point() //Price > Moving Average + fixed value
   )
     {
      RefreshRates();
      price = Ask;
      SL = StopLoss * Point(); //Stop Loss = value in points (relative to price)
      if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterMinutes * 60) return; //next open trade after time
      if(!inTimeInterval(TimeCurrent(), TOD_From_Hour, TOD_From_Min, TOD_To_Hour, TOD_To_Min)) return; //open trades only at specific times of the day   
      if(IsTradeAllowed())
        {
         ticket = myOrderSend(OP_BUY, price, TradeSize, "");
         if(ticket <= 0) return;
        }
      else //not autotrading => only send alert
         myAlert("order", "");
      LastTradeTime = TimeCurrent();
      myOrderModifyRel(ticket, SL, 0);
     }
   
   //Open Sell Order, instant signal is tested first
   RefreshRates();
   if(Cross(7, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) < Sell_wenn_X_durchkreuzt) //Commodity Channel Index crosses below fixed value
   && Bid < iMA(NULL, PERIOD_CURRENT, MA_Period, MA_Shift, MODE_EMA, PRICE_CLOSE, Shift) - OpenTrade_EntfernungMA * Point() //Price < Moving Average - fixed value
   )
     {
      RefreshRates();
      price = Bid;
      SL = StopLoss * Point(); //Stop Loss = value in points (relative to price)
      if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterMinutes * 60) return; //next open trade after time
      if(!inTimeInterval(TimeCurrent(), TOD_From_Hour, TOD_From_Min, TOD_To_Hour, TOD_To_Min)) return; //open trades only at specific times of the day   
      if(IsTradeAllowed())
        {
         ticket = myOrderSend(OP_SELL, price, TradeSize, "");
         if(ticket <= 0) return;
        }
      else //not autotrading => only send alert
         myAlert("order", "");
      LastTradeTime = TimeCurrent();
      myOrderModifyRel(ticket, SL, 0);
     }
  }



Danke im Vorraus!


lg thmatzer

 
bool Cross(const int dir, const int lookBack) {
   if ( dir == OP_BUY ) {
      if ( iCCI(_Symbol, _Period, CCI_Period, PRICE_TYPICAL, 0) > -100 ) return(false);
      for(int i=1;i<lookBack;i++) {
         if (iCCI(_Symbol, _Period, CCI_Period, PRICE_TYPICAL, i) >  -100 ) return(false); // :(
         if (iCCI(_Symbol, _Period, CCI_Period, PRICE_TYPICAL, i) <= -120 ) return(true);  // :)
      }
    } else if ( dir == OP_SELL ) {
      if ( iCCI(_Symbol, _Period, CCI_Period, PRICE_TYPICAL, 0) < 100 ) return(false);
      for(int i=1;i<lookBack;i++) {
         if (iCCI(_Symbol, _Period, CCI_Period, PRICE_TYPICAL, i) <   100 ) return(false); // :(
         if (iCCI(_Symbol, _Period, CCI_Period, PRICE_TYPICAL, i) >=  120 ) return(true);  // :)
      }
    }
   return(false); // :(
}
...
RefreshRates();
if(   Cross(OP_BUY, 6) //Commodity Channel Index crosses above fixed value
      && Bid > iMA(NULL, PERIOD_CURRENT, MA_Period, MA_Shift, MODE_EMA, PRICE_CLOSE, Shift) + OpenTrade_EntfernungMA * Point() //Price > Moving Average + fixed value
)
Auch dies ungetestet!
 

Hallo,


wollte dir eine  Nachricht schreiben, aber funktioniert anscheinend nicht bzw. ist der Nachrichtentext zu lang?


Ich danke dir nochmals für deine große Hilfsbereitschaft. Leider muss ich dir nochmals bitte mir zu helfen. (Ich weiß das es "nervend" ist Anfänger zu helfen)


Ich schaff es leider immer noch nicht die Schleife ohne Fehler einzufügen, und das nach mehreren Stunden versuchen und Internetrecherche.

Könntest du es bei meinen Komplett-Code ergänzen, bevor ich Verzweifle? :)

Schonmal besten Dank im Vorraus!


Hier wäre der Code:


-entfernt-

 

Och Mensch :(

Wenn Du den EA selber geschrieben hast, sollte es eigentlich kein Problem sein!

Hier kann Dir dann bei einzelnen Fragen geholfen werden, aber einen ganzen EA - dafür gibt es oben die Freelancer.

Grund der Beschwerde: