Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 22.01.16
Benutzerbild von trololotromberino
trololotromberino trololotromberino ist offline
Mitglied
 
Registriert seit: Jul 2015
Beiträge: 56
trololotromberino befindet sich auf einem aufstrebenden Ast
Standard Eigene Funktion für Orderaufgabe

Hallo mal wieder

ich versuche mich immer weiter an neuen codes, bzw. schreibe die alten Codes um.
Ich habe versucht, meinen ersten Code mal etwas anders zu fassen und ihn so schneller zu machen.
Dazu wollte ich eigentlich die verschiedenen Orderaufgaben in eigene Funktionen schreiben.
Leider gibt der EA aktuell gar keine Order aus, geschweige denn kommuniziert irgendwie mit dem MT....Könnt ihr mir vielleicht meinen Fehler zeigen?

Code:
//+------------------------------------------------------------------+
//|                                            Neuer Versuch neu.mq4 |
//|                                                Korbinian Gabriel |
//|                                                                - |
//+------------------------------------------------------------------+
#property copyright "Korbinian Gabriel"
#property link      "-"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

/*Idee: Wenn ATR unter bestimmten Wert ist, dann werden Trades sofort auf break even gezogen, sobald es möglich ist;
Aktuell liegt noch ein Fehler im Ordersendverfahren vor*/

//--- Extern variables
extern int Mx=0; 
extern int abst=3;
extern int irsi=14;
extern int iboll=20;
extern int st1=10;
extern double st2=3.0;
extern int slippage = 100; 
extern double takeprofit = 0; 
extern bool autostoploss = true; 
extern double manualsl = 20; 
extern int magicnumber = 1; 

extern double Lots  = 1.0;     

//--- Intern variables
int Oldbar = 0; 

double st1_long = iCustom(NULL,0,"SuperTrend1",st1,st2,0,1);
double st1_short = iCustom(NULL,0,"SuperTrend1",st1,st2,0,1);
double st2_long = iCustom(NULL,0,"SuperTrend1",st1,st2,0,2);
double st2_short = iCustom(NULL,0,"SuperTrend1",st1,st2,0,2);


double BBUP = iBands(NULL,0,iboll,2,2,PRICE_CLOSE,MODE_UPPER,0);
double BBDN = iBands(NULL,0,iboll,2,2,PRICE_CLOSE,MODE_LOWER,0);

double rsi1 = iRSI(NULL,0,irsi,PRICE_CLOSE,1);
double rsi0 = iRSI(NULL,0,irsi,PRICE_CLOSE,0); // hier möglicherweise die zahl zu 2 tauschen

int autosl,stoploss;

//--- Functions
int anzTradesLong() {
   int ord=0;
   int total = OrdersTotal();
   for(int i=0;i<=total-1;i++) {
      if(OrderSelect(i,SELECT_BY_POS)       
         && OrderType() == OP_BUY
         && OrderSymbol() == Symbol())
            ord++;
   }
   return (ord); 
}

int anzTradesShort() {
   int ord=0;
   int total = OrdersTotal();
   for(int i=0;i<=total-1;i++) {
      if(OrderSelect(i,SELECT_BY_POS)      
         && OrderType() == OP_SELL
         && OrderSymbol() == Symbol())
            ord++;
   }
   return (ord); 
}

bool long_st(){
   return st1_long < Close[1] && st1_short > Close[2];
   }

bool short_st(){
   return st1_long > Close[1] && st1_short < Close[2];
   }

//--- Look for the orderexecution:
      void execution(){
         if(OrdersTotal() > 0) Print("Order successfully placed",OrderMagicNumber(),OrderStopLoss(),OrderSymbol(),OrderType());
         else Print("ERROR while placing order occured!", GetLastError());
         }

//Maybe rsi signal for orderopening!!
int ordersend; 
void OpenLongOrderatBB(){
   ordersend = OrderSend(NULL,OP_BUY,Lots,BBUP,slippage,stoploss,takeprofit,"Open Pending Long Order at upper Bollinger Band",magicnumber,0,Green);
   if(ordersend == 0) Alert("OrderSend ERROR LongOrder NOT opened!", GetLastError());
   if(ordersend != 0) Print("Opened LongOrder: ",OrderMagicNumber()," on ",OrderSymbol(), "Lots: ",OrderLots()," StopLoss: ",OrderStopLoss()," TakeProfit: ",OrderTakeProfit());

   }

void OpenShortOrderatBB(){
   ordersend = OrderSend(NULL,OP_SELL,Lots,BBDN,slippage,stoploss,takeprofit,"Open Pending Short Order at lower Bollinger Band",magicnumber,0,Red);
   if(ordersend == 0) Alert("OrderSend ERROR ShortOrder NOT opened!", GetLastError());
   if(ordersend != 0) Print("Opened ShortOrder: ",OrderMagicNumber()," on ",OrderSymbol(), "Lots: ",OrderLots()," StopLoss: ",OrderStopLoss()," TakeProfit: ",OrderTakeProfit());

   }

void OpenLongOrderMarket(){
   ordersend = OrderSend(NULL,OP_BUY,Lots,Ask,slippage,stoploss,takeprofit,"Open Market Long Order",magicnumber,0,Green);
   if(ordersend == 0) Alert("OrderSend ERROR LongOrder NOT opened!", GetLastError());
   if(ordersend != 0) Print("Opened LongOrder: ",OrderMagicNumber()," on ",OrderSymbol(), "Lots: ",OrderLots()," StopLoss: ",OrderStopLoss()," TakeProfit: ",OrderTakeProfit());
   }

void OpenShortOrderMarket(){
   ordersend = OrderSend(NULL,OP_BUY,Lots,Bid,slippage,stoploss,takeprofit,"Open Market Short Order",magicnumber,0,Red);
   if(ordersend == 0) Alert("OrderSend ERROR ShortOrder NOT opened!", GetLastError());
   if(ordersend != 0) Print("Opened ShortOrder: ",OrderMagicNumber()," on ",OrderSymbol(), "Lots: ",OrderLots()," StopLoss: ",OrderStopLoss()," TakeProfit: ",OrderTakeProfit());
   }
//--- On expert-advisor initiation
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   if(Oldbar != Bars) {
   
//---
    
//---Stoplossdefinition
      if(OrderType() == OP_BUY) autosl = st1_long - abst;
      if(OrderType() == OP_SELL) autosl = st1_short + abst; 
      if(autostoploss == true) stoploss = autosl; 
      if(autostoploss == false) stoploss = manualsl;
      
//--- Initializing Orders
      if(st1_long < st2_short) OpenLongOrderatBB(); execution();
      if(st1_long < st2_short && Close[1] > BBUP) OpenLongOrderMarket(); execution();
      if(st2_long > st1_short) OpenShortOrderatBB(); execution(); 
      if(st2_long > st1_short && Close[1] < BBDN) OpenShortOrderMarket(); execution(); 
      
//--- Closing Orders
      if(rsi1 < 30 && rsi0 > 30)
      {
         int total = OrdersTotal();
         for(int i=0;i<=total-1;i++) {
            if(OrderSelect(i,SELECT_BY_POS)) { // Part soll dafür sorgen, dass nur 1 Position pro Signal eröffnet wird. 
               if(OrderCommission()+OrderProfit()+OrderSwap()>0) {
                  Print ("Order closing now, because of RSI-Signal!");
                  bool result = OrderClose(OrderSelect(OrderTicket(), SELECT_BY_POS),OrderLots(),Ask,10); //Komisch: Wenn ich SELECT_BY_TICKET auswähle, funktioniert der Trailingstop nicht
                  if (result == true)
                     Print ("Orderclosing ",OrderTicket()," succeeded");
                  else
                     Print ("Orderclosing ",OrderTicket()," failed");
               }
            }
         }
      }
      
      if(rsi1 > 70 && rsi0 < 70)
      {
         int total = OrdersTotal();
         for(int i=0;i<=total-1;i++) {
            if(OrderSelect(i,SELECT_BY_POS)) { // Part soll dafür sorgen, dass nur 1 Position pro Signal eröffnet wird. 
               if(OrderCommission()+OrderProfit()+OrderSwap()>0) {
                  Print ("Order closing now, because of RSI-Signal!");
                  bool result = OrderClose(OrderSelect(OrderTicket(), SELECT_BY_POS),OrderLots(),Bid,10); //Komisch: Wenn ich SELECT_BY_TICKET auswähle, funktioniert der Trailingstop nicht
                  if (result == true)
                     Print ("Orderclosing ",OrderTicket()," succeeded");
                  else
                     Print ("Orderclosing ",OrderTicket()," failed");
               }
            }
         }
      }

   
   }
   Oldbar = Bars;    
   return(0);
  }
//+------------------------------------------------------------------+
Vielen Dank und Grüße
trololotromberino
__________________
Ich arbeite aktuell an einem eigenen EA und komme nicht weiter!
Wäre cool, wenn mir Coder ein wenig weiterhelfen könnten:
www.expert-advisor.com/etsbh