Einzelnen Beitrag anzeigen
  #4 (permalink)  
Alt 17.04.17
traderdoc traderdoc ist offline
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Richertn Beitrag anzeigen
Hallo Leute, ich brauch mal Hilfe. Ich möchte wenn sich 2 MA Indikatoren kreuzen entweder Sell oder Buy Order geöffnet wird, das klappt auch ganz gut soweit. Nur jetzt hab ich ein Problem, wenn sich der MA gekreuzt hat, wird z.b. ein Sell Order geöffnet jetzt schließt sich der Sell Order mittels ST und weil die MAs noch immer gekreuzt sind öffnet sich gleich ein neuer Order dies möchte ich aber verhindern. Ein Beispiel: Wenn nach 5 Kerzen kein Signal mehr da ist so öffnet sich auch kein weiterer Order. Ich hab versucht es mit Bars zu realisieren aber irgendwie bekomme ich es nicht hin.

Vielen Dank schonmal im Voraus.
So könnte das aussehen.

Code:
input double TakeProfit   = 500;
input double StopLoses    = 400;
input double Lots         = 0.01;
double MagicNumber        = 2331;

double MA_kurz1, MA_kurz2, MA_lang1,  MA_lang2;
int ticket, total;
datetime OldBar;

void OnTick(void) {
   if (OldBar != Time[0]) {
      //Indikatoren.
      MA_kurz1 = iMA(Symbol(), 0, 28,  0, MODE_LWMA,PRICE_CLOSE, 1);
      MA_lang1 = iMA(Symbol(), 0, 144, 0, MODE_LWMA,PRICE_CLOSE, 1);
      MA_kurz2 = iMA(Symbol(), 0, 28,  0, MODE_LWMA,PRICE_CLOSE, 2);
      MA_lang2 = iMA(Symbol(), 0, 144, 0, MODE_LWMA,PRICE_CLOSE, 2); 

      total = OrdersTotal();
      if (total == 0) {
         //Prüfen ob genug Geld noch da ist.
         if (AccountFreeMargin() < 1000*Lots) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            OldBar = Time[0];
            return;
         }

         //Buy
         if ( MA_kurz2 < MA_lang2 && MA_kurz1 > MA_lang1) {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, NormalizeDouble(Ask - StopLoses*Point, Digits),
                        NormalizeDouble(Ask + TakeProfit*Point, Digits), "macd sample", MagicNumber, 0, Green);
            if (ticket > 0) {
               if (OrderSelect(ticket, SELECT_BY_TICKET))
                  Print("BUY order opened : ", OrderOpenPrice());
            } else Print("Error opening BUY order : ", GetLastError());
         }
         
         //Sell.
         if (MA_kurz2 > MA_lang2 && MA_kurz1 < MA_lang1) {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, NormalizeDouble(Bid + StopLoses*Point, Digits),
                        NormalizeDouble(Bid - TakeProfit*Point, Digits), "macd sample", MagicNumber, 0, Red);
            if (ticket > 0) {
               if (OrderSelect(ticket, SELECT_BY_TICKET))
                  Print("SELL order opened : ", OrderOpenPrice());
            } else Print("Error opening SELL order : ", GetLastError());
         } 
      }
      OldBar = Time[0];
   } 
}
Nun denn, es wird nur eine Buy- oder SellOrder geöffnet, wenn:
1. die freie Margin ausreicht und
2. betrachtet direkt nach einem Kerzenwechsel gerade eine MA-Kreuzung stattfand.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.