Einzelnen Beitrag anzeigen
  #4 (permalink)  
Alt 08.10.17
mat mat ist offline
Neues Mitglied
 
Registriert seit: Oct 2017
Beiträge: 16
mat befindet sich auf einem aufstrebenden Ast
Standard

Ich schicke vorweg: weder bin ich ein großer Trading-Experte, noch MQL-Spezialist! Aber ich programmiere seit über 30 Jahren und kann Dir daher ein paar allgemeine Tipps geben. (Kommentare im Code)

Code:
//+==================================================================================+
//| Calculate open positions                                                         | 
//+==================================================================================+

int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
	  // OrderSelect ist schon boolean, das muss nicht mehr mit true oder false verglichen werden.
	  // (Das ! heißt ›not‹)
      if( !OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ) break;
	  // Wo ist die Variable ›OrderMagicNumber‹ deklariert? (Nicht in diesem Codestück!)
	  // Jedenfalls würde ich auf ›strict‹ schalten
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==OrderMagicNumber)
        {
         if(OrderType()==OP_BUY)  buys++;
		 // Das if kann eingespart werden, falls OrderType()==OP_BUY war.
		 // Die Optimierung ist (vernachlässigbar) *winzig*, tritt aber immerhin in einer Schleife auf.
         ELSE if(OrderType()==OP_SELL) sells++;
        }
     }
	 // wo ist openOrders deklariert? Wieso sollte es >0 sein? Bzw. wie wird es jemals >0?
     if(openOrders>0) openOrders = buys+sells;
   return (openOrders);
}  
//+===================================================================================+
//| MoneyManagement - Calculate martingale lot size for open positiones               |            
//|===================================================================================+
double LotsOptimized()
  {
   double lot=Lots;
   
//--- select lot size
	// Tipp: Leg Dir eine Systematik zurecht, welche Variablen mit Großbuchstaben beginnen.
	// (bei mir: die Input-Parameter fangen mit Großbuchstaben an, alle lokalen Variablen klein.
	// Mach klar, dass Du keine integer-Division willst (100.)
   lot=NormalizeDouble(AccountFreeMargin() * MaximumRisk / 100., 2);  //  2 = Digits for DAX

//--- calculate martingale steps
   if(ProfitFactor>0)
     {
//-- MathPow(double base,double exponent); = bereits im Editor implementiert
//-- Formel für Zahlenreihe der Verdopplung: a(openOrders) = 2 *2(hoch openOrders - 1)
     lot = NormalizeDouble(lot *2 *MathPow(2,openOrders - 1),2);
     }  
//--- return lot size
   if(lot<0.01) lot=0.01;
   return(lot);
  }  
//+=======================================================================================+
Alles nur Vorschläge und Anregungen!

LG