Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   1 Order pro Signal (http://www.expert-advisor.com/forum/showthread.php?t=5612)

Richertn 16.04.17 15:13

1 Order pro Signal
 
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.

PHP-Code:

input double TakeProfit    =500;
input double StopLoses     =400;
input double Lots          =0.01;
double MagicNumber         2331;
double MA_kurz,MA_lang;
int ticket,total;

void OnTick(void)
   {

   
//Indikatoren.
   
MA_kurz=iMA(Symbol(),0,28,0,MODE_LWMA,PRICE_CLOSE,0);
   
MA_lang=iMA(Symbol(),0,144,0,MODE_LWMA,PRICE_CLOSE,0);
   
      
//Buy oder Sell.
   
total=OrdersTotal();
   if(
total<1)
   {
   
//Prüfen ob genug Geld noch da ist.
   
if(AccountFreeMargin()<(1000*Lots))
     {
        Print(
"We have no money. Free Margin = ",AccountFreeMargin());
        return;
     }
   
   
   
   
      

   
   
//Testen ob ein Buy Signal vorliegt.
   
 
   
if(MA_kurz>MA_lang)

      {
         
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoses*Point,Ask+TakeProfit*Point,"macd sample",MagicNumber,0,Green);
         if(
ticket>0)
           {
               if(
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print(
"BUY order opened : ",OrderOpenPrice());

           }
         else
            Print(
"Error opening BUY order : ",GetLastError());
            return;
            }
            
            

            
      
      
   
//Testen ob ein Sell Signal vorliegt.

   
if(MA_kurz<MA_lang)
      {
         
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoses*Point,Bid-TakeProfit*Point,"macd sample",MagicNumber,0,Red);
         if(
ticket>0)
           {
             if(
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
             Print(
"SELL order opened : ",OrderOpenPrice());

           }
         else
           Print(
"Error opening SELL order : ",GetLastError());
     
      
//Exit
      
return;
      }
      
   
   }
   
   } 


Raul0 17.04.17 00:59

Die einfachste Möglichkeit wäre eine Variable mit Orderabgabe zu setzen, welcher erst wieder bei dem Gegensignal rückgesetzt wird. Somit wird die ganze Zeit keine neue Order gesendet.
Das gleiche auch für die andere Richtung.

Richertn 17.04.17 11:58

Und wie realisiere ich das am besten? Gibt es ein Code Schnipsel woran ich mich orientieren kann?

traderdoc 17.04.17 14:28

Zitat:

Zitat von Richertn (Beitrag 38420)
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

Richertn 17.04.17 15:04

Vielen Dank Traderdoc so funktioniert es Perfekt. Echt ein tolles Forum.


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:28 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum