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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3809
Beiträge: 36861
Benutzer: 6.032
Aktive Benutzer: 487
Links: 80
Wir begrüßen unseren neuesten Benutzer: FAB
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 21 Stunden
- FAB
vor 23 Stunden
- expertyer
vor 3 Tagen
- tuz13
vor 3 Tagen
- roteaugen
vor 5 Tagen
- cutson

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 34
Gesamt: 36
Team: 0
Team:  
Benutzer:  Domke01, Kronenchakra
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 23.08.17
Neues Mitglied
 
Registriert seit: May 2017
Beiträge: 12
Gondiego befindet sich auf einem aufstrebenden Ast
Standard EA setzt keine Trades ab

Hallo zuammen,

ich habe (versucht) einen Indikator in einen EA zu wandeln, aber er setzt einfach keine Trades ab. Habe ich irgendwo einen grundelgeneden Fehler den ich übersehe?

Code:
#include <stdlib.mqh>

#property copyright 
#property link      ""
#property version   "1.00"
#property strict
#property indicator_buffers 4
#property indicator_chart_window



extern double  Lot = 0.1;
extern double  TakeProfit = 0;
extern double  StopLoss = 0;
extern bool    AutomaticTrading = true;
extern bool    SendAlert = true;
extern bool    SendEmail = false;



int        AlertMinutesB4Close =x;
double   ExtHistoBuffer[];
double   ExtHistoBuffer2[];
double   BlueBar[],RedBar[];
double   nPips = x;



void SetLoopCount(int loops)
{
}

void SetIndexValue(int shift, double value)
{
  ExtHistoBuffer[shift] = value;
}

void SetIndexValue2(int shift, double value)
{
  ExtHistoBuffer2[shift] = value;
}

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   
      
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
         int shift = 0;
         double cnt = 0;
         double TrStopLevel = 0;
         double PREV = 0;
         double pass = 0;
         
         SetLoopCount(0);
         // loop from first bar to current bar (with shift=0)
         
         for( shift=Bars-2; shift>=0 ;shift--)
         { 
            if( (Close[shift] == PREV) )           
               {
                  TrStopLevel=PREV;
               }            
            else 
            {
               if( (Close[shift+1])<PREV && (Close[shift]<PREV)  )               
                  {
                     TrStopLevel=MathMin(PREV,Close[shift]*(1+nPips));
                  }               
               else  
               {
                  if( (Close[shift+1])>PREV && (Close[shift]>PREV) )                  
                     {
                        TrStopLevel=MathMax(PREV,Close[shift]*(1-nPips));
                     }               
                  else                 
                  {
                     if( (Close[shift]>PREV) )                         
                        {                   
                           TrStopLevel=Close[shift]*(1-nPips);
                        }                 
                     else                     
                        {
                           TrStopLevel=Close[shift]*(1+nPips);
                        }
                  }
               }
            }
                        
            if( Close[shift] > TrStopLevel &&  Close[shift+1]<PREV && PREV !=0 ) 
            
            {              
                  if(AutomaticTrading)                  
                     {
                        OrderSend(OP_BUY,Lot,MarketInfo(Symbol(), MODE_ASK),2,StopLoss,Ask-TakeProfit*Point,Lime);
                     }                 
                  if(SendAlert) 
                     {
                        Alert(Symbol() + " - Look for Buying opportunity soon");
                     }                 
                  if(SendEmail)                 
                     {
                        SendMail("Possible Buy setup on " + Symbol(),"Text"); 
                     }                     
                  RedBar[shift]=Low[shift];
                  BlueBar[shift]=High[shift];
                  SetIndexValue(shift, TrStopLevel);                          
            }
                        
            if( Close[shift] < TrStopLevel &&  Close[shift+1]>PREV  && PREV !=0) 
            {
                  if(AutomaticTrading)                 
                     {
                        OrderSend(OP_SELL,Lot,MarketInfo(Symbol(), MODE_BID),2,StopLoss,Bid-TakeProfit*Point,Red);
                     }                 
                  if(SendAlert)                 
                     {
                        Alert(Symbol() + "Text");
                     }                  
                  if(SendEmail)                 
                     {
                        SendMail("Text","Text");
                     }         
                  BlueBar[shift]=Low[shift];
                  RedBar[shift]=High[shift];
                  SetIndexValue2(shift, TrStopLevel);                              
            }                        
            PREV=TrStopLevel;            
         } 
         
  return(0);
   
  }
//+------------------------------------------------------------------+
Wäre um jede Hilfe dankebar.

Gruß Gondiego
Mit Zitat antworten
  #2 (permalink)  
Alt 23.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.868
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ohne den Code vollständig seziert zu haben, fallen diese beiden Zeilen auf, da stimmt so einiges nicht:

OrderSend(OP_BUY,Lot,MarketInfo(Symbol(), MODE_ASK),2,StopLoss,Ask-TakeProfit*Point,Lime);

OrderSend(OP_SELL,Lot,MarketInfo(Symbol(), MODE_BID),2,StopLoss,Bid-TakeProfit*Point,Red);

1. keine Angabe des Symbols
2. bei StopLoss müsste der Kurs des StopLoss angegeben werden, was ich bezweifle, da diese Variable so in den Eigenschaften geschrieben steht
3. beim TakeProfit der BuyOrder würde der TP unter!! dem Open der Order liegen - das geht natürlich gar nicht.

Besser wäre es, sich an die Vorgabe der Dokumentation zu halten:

int OrderSend(
string symbol, // symbol
int cmd, // operation
double volume, // volume
double price, // price
int slippage, // slippage
double stoploss, // stop loss
double takeprofit, // take profit
string comment=NULL, // comment
int magic=0, // magic number
datetime expiration=0, // pending order expiration
color arrow_color=clrNONE // color
);

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 23.08.17
Neues Mitglied
 
Registriert seit: May 2017
Beiträge: 12
Gondiego befindet sich auf einem aufstrebenden Ast
Standard

Hallo traderdoc,

danke für deine Antwort. Ja, das sind dann so Sachen, die sieht man nicht mehr wenn man zu lange davor sitzt.

Aber....auch durch ändern der Zeilen tut sich nichts...selbst wenn ich sie ohne Verweise schreibe.

OrderSend(Symbol(),OP_BUY,0.1,MarketInfo(Symbol(), MODE_ASK),2,0,0,NULL,0,0,Green);

OrderSend(Symbol(),OP_SELL,0.1,MarketInfo(Symbol() , MODE_BID),2,0,0,NULL,0,0,Red);


Ich habe einfach mal den ursprünglichen Indikator mitangehangen, vielleicht hilft das.

Gondiego
Angehängte Dateien
Dateityp: mq4 UrsprungsIndikator.mq4 (4,1 KB, 4x aufgerufen)
Mit Zitat antworten
  #4 (permalink)  
Alt 23.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.868
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

OK, dann muss jetzt jemand ran, der viel Zeit hat, um den Fehler zu finden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #5 (permalink)  
Alt 24.08.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 249
next user befindet sich auf einem aufstrebenden Ast
Standard

*Hust...

Hab auch mal kurz einen Blick auf deinen Code im 1 Post geworfen:

Code:
#property copyright
Da fehlt der Wert.

Code:
int        AlertMinutesB4Close =x;
...
double   nPips = x;
X ist nirgendwo definiert.

Code:
void SetLoopCount(int loops)
{
}
Leere Funktion, die du aber weiter unten mit dem Wert "0" aufrufst.

Code:
for(shift=Bars-2; shift>=0 ;shift--)
{ 
   if(Close[shift] == PREV)           
      TrStopLevel=PREV;
   else 
   {
      if((Close[shift+1])<PREV && (Close[shift]<PREV))               
         TrStopLevel=MathMin(PREV,Close[shift]*(1+nPips));             
      else  
      {
         if((Close[shift+1])>PREV && (Close[shift]>PREV))
            TrStopLevel=MathMax(PREV,Close[shift]*(1-nPips));
         else                 
         {
            if(Close[shift]>PREV)
               TrStopLevel=Close[shift]*(1-nPips);
            else                     
               TrStopLevel=Close[shift]*(1+nPips);
         }
      }
   }
Im ersten Durchlauf der Schleife ist die Variable "PREV" 0. Der Code geht also an der blau hervorgehobenen Stelle weiter.
Dort hast du aber einen Fehler (rot hervorgehoben), denn "nPips" initialisierst du oben mit der nicht vorhandenen Variable "x", somit
wird die Variable "TrStopLevel" auch nicht "optimal" belegt.


Zitat:
Zitat von Gondiego Beitrag anzeigen
ich habe (versucht) einen Indikator in einen EA zu wandeln...
  • Fehler 1:
    Code:
    #property indicator_buffers 4
    #property indicator_chart_window
    ===>>> Gehört nicht in einen EA.
  • Fehler 2:
    Code:
    ...
    double   ExtHistoBuffer[];
    double   ExtHistoBuffer2[];
    double   BlueBar[],RedBar[];
    ...
    ===>>> In einem EA sind das einfach nur dynamische Arrays, OHNE Bindung zu einem "Indicator-Buffer" und somit auch OHNE "automatischer Größenverwaltung".
    Zu diesem Zeitpunkt haben diese Arrays keine wirkliche größe.
  • Fehler 3:
    Code:
    void SetIndexValue(int shift, double value)
    {
      ExtHistoBuffer[shift] = value;
    }
    
    void SetIndexValue2(int shift, double value)
    {
      ExtHistoBuffer2[shift] = value;
    }
    ===>>> 1. Diese beiden "Buffer" sind, wie gerade schon erwähnt normale, dynamische Arrays, momentan ohne Größe.
    Den Index "shift" gibt es somit nicht.
    ===>>> 2. Hier würdest du einfach nur einen Wert in das Array setzen. Dieses Array ist jedoch nicht an einen Indikator-Buffer gebunden.
    Diese Arrays werden also nicht "automatisch" für irgendetwas genutzt.
  • Fehler 4:
    Code:
    BlueBar[shift]=Low[shift];
    RedBar[shift]=High[shift];
    SetIndexValue2(shift, TrStopLevel);
    ===>>> Auch hier setzt du lediglich Werte in ein dynamisches Array, welches zu diesem Zeitpunkt noch nichtmal eine Größe hat.
    Der Index "shift" ist also auch hier nicht existent.


Ich frag mich auch grad, ob du beim Compilieren überhaupt keine Errors und Warnungen erhalten hast... ?

Jetzt aber schlafen...
Mit Zitat antworten
  #6 (permalink)  
Alt 24.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.868
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Na siehst Du, @Gondiego, hat sich doch schon jemand gefunden, der einfach zu viel Zeit hat.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #7 (permalink)  
Alt 24.08.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 249
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
...der einfach zu viel Zeit hat.
Stimmt. Wenn ihr meinen Namen unter den "Onlineusern" mal nicht seht, das ist ein Bug den Master noch nicht behoben hat.
Bin 24/7 präsent...

Spaß bei Seite, mein Post waren die letzten Minuten vorm Schlafen gehen. Da hab ich die mal schnell noch sinnvoll genutzt.
Mit Zitat antworten
  #8 (permalink)  
Alt 27.08.17
Neues Mitglied
 
Registriert seit: May 2017
Beiträge: 12
Gondiego befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

erstmal vielen Danke @next user für deine Mühe.

Code:
#property copyright

int        AlertMinutesB4Close =x;
...
double   nPips = x;
Das mit den x ist mir schon bewusst, das habe ich einfache weggelassen. Sollte ja darum gehen, ob es grundlegende Fehler im Aufbau gibt - was du ja letztendlich festgestellt hast.

Aber dafür stecke ich einfach zu wenig in der Materie

Kann mir denn jetzt jemand sagen, was ich tun muss, damit er als EA einfach nur eine Order, bei Auftreten der Pfeile, absetzt?
(Vielleicht hilft ja der Ursprungscode des Indis, welchen ich mit angehangen habe)

Wenns garnicht anders geht, bin ich auch bereit, das auf Honorarbasis machen zu lassen. (wenns nicht zu teuer wird ;-P )

Gondiego
Mit Zitat antworten
  #9 (permalink)  
Alt 27.08.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 249
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gondiego Beitrag anzeigen
...das auf Honorarbasis machen zu lassen. (wenns nicht zu teuer wird ;-P )
Hey Doc, biste da
Mit Zitat antworten
  #10 (permalink)  
Alt 27.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.868
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Der @doc ist da, steckt aber zu tief in anderen Aufträgen.
Übernimm Du mal.

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

Lesezeichen

Stichworte
keine order, keine trades, mql4, order, programmierung, programmierung metatrader, programmierung mql4, trades


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 15:06 Uhr.



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