Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43254
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 243
Gesamt: 243
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 21.09.16
Neues Mitglied
 
Registriert seit: Sep 2016
Beiträge: 15
Trading111 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Und in Deiner Angabe MA(80) wäre dann die MA_Periode eben 80.
D.h. Du benötigst eine MA_Periode_kurz und eine MA_Periode_lang. Fertig!

traderdoc
Danke für die Antwort Traderdoc. Es hat mir geholfen und ich hab es so umgesetzt. Er setzt jetzt schon zuerst beim Kreuzen die richtige Order - aber nach dem Teke Profit setzt er gleich die nächste Order ohne, dass tatsächlich eine Kreuzung stattgefunden hat (siehe Bild). Da kann ja nicht sein.
Beim kompilieren kommen aber nur noch Wrnhinweise 'implicit conversion from string to number'. Aber das kann doch nicht der Grund sein oder doch?

Code:
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
extern int MA_Periode_lang = 30;
extern int MA_Periode_kurz = 8;
extern double HandelsLots = 0.1, SL_prozent = 0.5, TP_prozent = 1.5;
extern int MagicNummer = 12345;
extern int OrdersTotal;

// Globale Variable
datetime PeriodenStartZeit;
bool NeuePeriodeBegonnen,LongSignal,ShortSignal;
int LongOrder, ShortOrder;
//void Sleep(int milliseconds);
//int TimeWaiting = 0;

int OnInit()
  {
//---
    PeriodenStartZeit = Time[0];
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
//void OnTick()
//  {
//---
   
//  }
//+------------------------------------------------------------------+

// expert function
int start ()
{
   // Überprüfen ob neuer Periodenbeginn vorliegt
   if(PeriodenStartZeit != Time[0])
      {
         NeuePeriodeBegonnen = true;
         PeriodenStartZeit = Time[0];
      }
   else NeuePeriodeBegonnen = false;
      
   // Marktdaten ermitteln
   double MA_lang            = iMA(NULL,0,MA_Periode_lang,0,0,0,1);
   double MA_lang_Vorperiode = iMA(NULL,0,MA_Periode_lang,0,0,0,2);
   double MA_kurz            = iMA(NULL,0,MA_Periode_kurz,0,0,0,1);
   double MA_kurz_Vorperiode = iMA(NULL,0,MA_Periode_kurz,0,0,0,2);
  
  if (LongSignal == false && ShortSignal == false)
   {
   // Handelssignale ermitteln
      if(NeuePeriodeBegonnen == true)
      {
         // Buy Signal
         if(MA_lang < MA_kurz && MA_lang_Vorperiode >= MA_kurz_Vorperiode)
            {
               LongSignal = true;
            }
         else LongSignal = false;
                
         // Sell Signal
         if(MA_lang > MA_kurz &&  MA_lang_Vorperiode <= MA_kurz_Vorperiode)
         {
            ShortSignal = true;
         }
         else ShortSignal =false;
      }
      else 
      {
         LongSignal = false;
         ShortSignal = false;
      }
   
    }
   
   // LongSignale umsetzen
   if (LongSignal == true)
   {
      // eventuell Short Order schließen     
      if (ShortOrder>0)
      {
           if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == 0)
           {
              bool ShortOrderGeclosed = OrderClose(ShortOrder,HandelsLots,Ask,10,Blue);
              if (ShortOrderGeclosed == true) ShortOrder = 0;
           }
      }
      while (LongOrder <= 0)
      {
         LongOrder = OrderSend(Symbol(),OP_BUY, HandelsLots,Ask,10,0,"MAXing Long",MagicNummer,0,Green);
      }
   }
   if (ShortSignal == true)
   {
      // eventuell Long Order schließen     
      if (LongOrder>0)
      {
           if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true)
           {
               bool LongOrderGeclosed = OrderClose(LongOrder,HandelsLots,Bid,10,Blue);
               if (LongOrderGeclosed == true) LongOrder = 0;
           }
      }
      while (ShortOrder <= 0)
      {
         ShortOrder = OrderSend(Symbol(),OP_SELL, HandelsLots,Bid,10,0,"MAXing Short",MagicNummer,0,Red);
      }
   }
   
 /*  // SL Long Deals setzen
   if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderCloseTime() == 0 && OrderStopLoss()==0)
      {
         double StopLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_prozent/100)),Digits);
         bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow);
      }
   }
   
   // SL Short Deals setzen
   if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderCloseTime() == 0 && OrderStopLoss()==0)
      {
         double StopLoss = NormalizeDouble(OrderOpenPrice()*(1+(SL_prozent/100)),Digits);
         bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow);
      }
   } */
   
   // TP Long Deals setzen
   if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderCloseTime() == 0 && OrderTakeProfit()==0)
      {
         double TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_prozent/100)),Digits);
         bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
      }
   }
   
   // TP Short Deals setzen
   if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderCloseTime() == 0 && OrderTakeProfit()==0)
      {
         double TakeProfit = NormalizeDouble(OrderOpenPrice()/(1+(TP_prozent/100)),Digits);
         bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
      }
   }
  
   // Ticketnummern nach Closing zurücksetzen
   if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderTicket()>0 && OrderCloseTime()>0) LongOrder = 0;
   }
   
   if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderTicket()>0 && OrderCloseTime()>0) ShortOrder = 0;
   }
  return(0);    
}
Angehängte Grafiken
Dateityp: jpg 1.jpg (256,8 KB, 4x aufgerufen)
  #12 (permalink)  
Alt 22.09.16
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Wenn nach dem Schließen durch TP/SL die Öffnungsbedingungen
immer noch gegeben sind... Poste mal Bilder zum besseren Verständnis.
  #13 (permalink)  
Alt 22.09.16
Neues Mitglied
 
Registriert seit: Sep 2016
Beiträge: 15
Trading111 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Wenn nach dem Schließen durch TP/SL die Öffnungsbedingungen
immer noch gegeben sind... Poste mal Bilder zum besseren Verständnis.
Hallo MA-EA - danke für die Antwort. Ja ich glaube es könnte daran liegen. Ich probiere schon etwas jetzt dort zu modifizieren. Also es ist auffällig, dass immer direkt nach dem TP sofort wieder die gleiche Ordereröffnet wird. Die Bedingungen dazu bestehen zu der Zeit noch (siehe Bild). Nur wie erwähnt ich bin erst Anfänger und deswegen ist das bei mir noch nicht so schnell umgesetzt.

hier sind noch mal meine Bedingungen im Code:

if (LongSignal == false && ShortSignal == false)
{
// Handelssignale ermitteln
if(NeuePeriodeBegonnen == true)
{
// Buy Signal
if(MA_lang < MA_kurz && MA_lang_Vorperiode >= MA_kurz_Vorperiode)
{
LongSignal = true;
}
else LongSignal = false;

// Sell Signal
if(MA_lang > MA_kurz && MA_lang_Vorperiode <= MA_kurz_Vorperiode)
{
ShortSignal = true;
}
else ShortSignal =false;
}
else
{
LongSignal = false;
ShortSignal = false;
}
Angehängte Grafiken
Dateityp: jpg 3.jpg (150,7 KB, 2x aufgerufen)
  #14 (permalink)  
Alt 22.09.16
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Mit dem TP ist das so ne Sache. Er wird nach diesem immer
wieder ne neue Order öffnen, solange entsprechende Bedingungen
gegeben sind. Versuch vielleicht z.B. nen Buy ohne TP zu schließen
wenn

Close Bar 1 < MA_kurz.


Buy öffnen wenn

Close Bar 1 > MA_kurz && MA_kurz > MA_lang

Umgedreht mit Sells. Dann kann er mal verschnaufen bzw.
Seitwärtsphasen auslassen.

Wobei ich immer noch nicht ganz kapiere, was das mit der
Vorperiode soll. Kannst Du das mal mit Chart-Bildern erklären?
  #15 (permalink)  
Alt 23.09.16
Neues Mitglied
 
Registriert seit: Sep 2016
Beiträge: 15
Trading111 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Mit dem TP ist das so ne Sache. Er wird nach diesem immer
wieder ne neue Order öffnen, solange entsprechende Bedingungen
gegeben sind. Versuch vielleicht z.B. nen Buy ohne TP zu schließen
wenn

Close Bar 1 < MA_kurz.


Buy öffnen wenn

Close Bar 1 > MA_kurz && MA_kurz > MA_lang

Umgedreht mit Sells. Dann kann er mal verschnaufen bzw.
Seitwärtsphasen auslassen.

Wobei ich immer noch nicht ganz kapiere, was das mit der
Vorperiode soll. Kannst Du das mal mit Chart-Bildern erklären?


Mit der Vorperiode meine ich die Periode, die genau vor der anderen Vergleichsperiode kommt - deswegen ist bei Vorperiode der Shift auf 2 gesetzt und bei den anderen auf 1 (siehe unten in rot)


double MA_lang = iMA(NULL,0,MA_Periode_lang,0,0,0,1);
double MA_lang_Vorperiode = iMA(NULL,0,MA_Periode_lang,0,0,0,2);
double MA_kurz = iMA(NULL,0,MA_Periode_kurz,0,0,0,1);
double MA_kurz_Vorperiode = iMA(NULL,0,MA_Periode_kurz,0,0,0,2);


Im Bild sieht man dass die sich da genau kreuzen - nach dem TP wird sofort die neue Order eröffnet (siehe 2. Bild). Das komische ist aber, dass doch dort garnicht die gesamte Bedingung erfüllt ist also Der rote Teil ist nicht erfüllt aus meiner Sicht:

// Buy Signal
if(MA_lang < MA_kurz && MA_lang_Vorperiode >= MA_kurz_Vorperiode)

schon komisch
Angehängte Grafiken
Dateityp: jpg 4.jpg (166,8 KB, 5x aufgerufen)
Dateityp: jpg 6.jpg (225,4 KB, 3x aufgerufen)
  #16 (permalink)  
Alt 23.09.16
Mitglied
 
Registriert seit: Mar 2016
Beiträge: 68
SusanneH befindet sich auf einem aufstrebenden Ast
Standard

Ich habe jetzt nur kurz drübergelesen über deinen Code, aber auf den ersten Blick würde ich sagen, dass du dein LongSignal / ShortSignal zurücksetzen musst.

Du checkst die Bedingung mit
if (LongSignal == false && ShortSignal == false)
{....}
und setzt nur dort drinnen die Signale zurück.
Wenn du aber bereits LongSignal=true hast, ein Trade eröffnet wird, dieser per TP geschlossen wird, kommt sofort der nächste Trade da LongSignal=true ist. (noch immer)
  #17 (permalink)  
Alt 23.09.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

hab auch nur über den thread geschaut, aber ich bin mir sicher dass Susanne recht hat.

Wenn immer wieder neue Order eröffnet werden, dann nur weil die EntrySignale nicht zurück gesetzt werden oder die Variable einfach falsch ist. Glaub damit hat jeder Neuling zu kämpfen, kenn das auch ganz gut. Versuchs mal so:

Code:
   double MA_lang            = iMA(NULL,0,MA_Periode_lang,0,0,0,1);
   double MA_lang_Vorperiode = iMA(NULL,0,MA_Periode_lang,0,0,0,2);
   double MA_kurz            = iMA(NULL,0,MA_Periode_kurz,0,0,0,1);
   double MA_kurz_Vorperiode = iMA(NULL,0,MA_Periode_kurz,0,0,0,2);

if(BarCount != Bars)
  {
    if(/*Regel Kreuzung Long*/)
   {
     //OrderSend Long rein hauen
   }
    if(/* Regel Kreuzung Short*/)
   {
     //OrderSend Short rein hauen
   }
   BarCount = Bars;
  }
so fragst du die Einstiegssignale nur einmal pro neuer Kerze ab, was bei Kreuzungen ja auch eher sinn macht. So sparst du dir auch das rücksetzten der Signale. Must oben eben nur noch BarCount initialisieren oberhalb von start(). Bedeutet du setzt einfach folgende Zeile hin : int BarCount =0 ;

Es gibt zich Tutorials zu C++. Würd dir empfehlen erst mal Basics zu lernen bevor du weiter machst, denn dann tust du dich nicht so schwer, das hält doppelt und dreifach auf.Wenn man nicht weiß wofür int, double oder string steht,dann macht das echt keinen Sinn. Bin auch kein Profi also quereinsteiger und tuh mich oft trotz einigem Wissen noch schwer. Gelernte Programmierer haben es eben leichter

LG
Thema geschlossen

Lesezeichen

Stichworte
kreuzung, kreuzung ma, kreuzung moving average, moving average, mql4, programmierung, programmierung metatrader

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------