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

Ich habe mir mal erlaubt, den Code per #-Button so darzustellen, dass man ihn auch lesen kann. So sollte das in Zukunft immer geschrieben werden, sonst kann ihn keiner helfen!

Code:
extern double Lot=0.01;
extern int StopLoss=6;
extern int TakeProfit=10;
int Multiplier;
int i=0;

int zaehler;
int MagicNumber=1234;
double TPValue,SLValue;

//+------------------------------------------------------------------+

void OnInit() {
   Multiplier = 1;
   if(Digits == 3 || Digits == 5) Multiplier = 10;
   if(Digits == 6) Multiplier = 100;
   if(Digits == 7) Multiplier = 1000;

   TakeProfit *= Multiplier;
   StopLoss *= Multiplier;

   TPValue = NormalizeDouble(TakeProfit * Point, Digits);
   SLValue = NormalizeDouble(StopLoss * Point, Digits);
}

void start() {
   int ticket;
   string comment="Expiration v2 (Long)";
   //+------------------------------------------------------------------+
   int offeneorders=0;
   int anzahlorders=OrdersTotal();

   if (Close[2] < Open[2] && Close[1] > Open[1]) {
      for(zaehler=0; zaehler<anzahlorders; zaehler++) {
         OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES);
         if(OrderSymbol()==Symbol()) {
            offeneorders++;
         }
      }

      if(offeneorders==0) {
         ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-   SLValue,Ask+TPValue,comment,0,0,Blue);
      }
      if (Time[0] > OrderOpenTime() + 4*Period()*60) {
         OrderClose(ticket,Lot,Bid,3,0);
      }
   }
   return(0);
}
So kann das Programm nicht funktionieren.
Ich habe Einiges umgestellt und v.a. über Funktionsaufrufe den Code strukturiert und die SellOpen-Funktion eingebaut.

Code:
extern double Lot=0.01;
extern int StopLoss=6;
extern int TakeProfit=10;
int Multiplier;
int i=0;
int OffeneOrders;
int MagicNumber=1234;
double TPValue, SLValue;
string Comment = "Expiration v2 (Long)";

//+------------------------------------------------------------------+

int OnInit() {
   Multiplier = 1;
   if(Digits == 3 || Digits == 5) Multiplier = 10;
   if(Digits == 6) Multiplier = 100;
   if(Digits == 7) Multiplier = 1000;

   TakeProfit *= Multiplier;
   StopLoss *= Multiplier;

   TPValue = NormalizeDouble(TakeProfit * Point, Digits);
   SLValue = NormalizeDouble(StopLoss * Point, Digits);

   return(INIT_SUCCEEDED);
}

void OnTick() {
   CheckOrders();
   CheckOpening();
}

void CheckOrders() {
   bool ret;
   OffeneOrders = 0;
   for(int i = OrdersTotal()-1; i >= 0; i--) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if(OrderSymbol() == Symbol()) {
            if (OrderType() == OP_BUY) {
                if (Time[0] > OrderOpenTime() + 4*Period()*60) {
                  ret = OrderClose(OrderTicket(), OrderLots(), Bid, 3, 0);
                  if (ret) continue;
               }
            }
            if (OrderType() == OP_SELL) {
                if (Time[0] > OrderOpenTime() + 4*Period()*60) {
                  ret = OrderClose(OrderTicket(), OrderLots(), Ask, 3, 0);
                  if (ret) continue;
               }
            }
            OffeneOrders++;
         }
      }
   }
}

void CheckOpening() {
   if (Close[2] < Open[2] && Close[1] > Open[1]) {
      if(OffeneOrders == 0) {
         int ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, Ask-SLValue, Ask+TPValue, Comment, 0, 0, Blue);
      }
   }
   if (Close[2] > Open[2] && Close[1] < Open[1]) {
      if(OffeneOrders == 0) {
         int ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, Bid+SLValue, Bid-TPValue, Comment, 0, 0, Green);
      }
   }
}
Viel Erfolg!

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