Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   Was mach ich falsch? (http://www.expert-advisor.com/forum/showthread.php?t=5726)

Nefastus 19.06.17 09:14

Was mach ich falsch?
 
Hallo Community ich finde mein fehler nicht er mach nur Buy Trades und keine Sell´s
Kann mir wer auf die Sprünge helfen?
Danke im vorraus
PHP-Code:

//+--------------------------------------------------------------+
//|                                                             Triple SMA.mq5              |
//|                                                              Marcel David                |
//+-------------------------------------------------------------------+

#include<Trade\Trade.mqh>
CTrade  trade;

// Variablen 
//string Version="Triple SMA 001";
//double Balance=0; // Bruttokontostand
//double Equity=0;  // Nettokontostand
//double Bid=0;     // BidPreis aktuell
//double Ask=0;     // AskPreis aktuell
//double OpenPositionVolume =0; //Positionsvolumen
//int PositionsAnzahl=0; // PositionsAnzahl
//int MaximalePositionsAnzahl=100; //maximale Positionsanzahl

void OnTick()
  {  
   
// Ask Preis holen
   
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   
   
// Bid Preis holen
   
double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);

   
// 3 Arrays fuer mehrere Preise erstellen
   
double SMA7Array[],SMA50Array[],SMA100Array[];
   
   
// Definition der Eigenschafften fuer den SMA
   
int SMA7Definition iMA (_Symbol,_Period,7,0,MODE_SMA,PRICE_CLOSE);
      
int SMA50Definition iMA (_Symbol,_Period,50,0,MODE_SMA,PRICE_CLOSE);
         
int SMA100Definition iMA (_Symbol,_Period,100,0,MODE_SMA,PRICE_CLOSE);
         
   
// Sortierte Preisarrays von der Aktuellen Kerze abwaerts
   
ArraySetAsSeries(SMA7Array,true);
      
ArraySetAsSeries(SMA50Array,true);
         
ArraySetAsSeries(SMA100Array,true);
         
   
// Definierter EA, eine Lienie, von Kerze 0, 10 Kerzen, in Array speichern
   
CopyBuffer(SMA7Definition,0,0,10,SMA7Array);
      
CopyBuffer(SMA50Definition,0,0,10,SMA50Array);
         
CopyBuffer(SMA100Definition,0,0,10,SMA100Array);
         
   
// Kaufsignal berechnen
   
if (SMA7Array[0]>SMA50Array[0])
      if (
SMA50Array[0]>SMA100Array[0])
      
        {
        
trade.Buy(0.01,NULL,Ask,0,(Ask+10 _Point),NULL);
        }
       
   
// Verkaufsignal berechnen
   
if (SMA7Array[0]<SMA50Array[0])
      if (
SMA50Array[0]<SMA100Array[0])
      
        {
         
trade.Sell(0.01,NULL,Bid,0,(Bid-10 _Point),NULL);
        }

  
  } 


Nefastus 19.06.17 10:18

:)
 
So fehler gefunden^^
man sollte schon im double Bid auch SYMBOL_BID schreiben^^
bis zum nächsten denk fehler
salü euer Nefastus

Nefastus 19.06.17 11:43

eine weitere Frage :)
 
Wie kann ich das so schreiben das er nur EIN Buy und Ein Sell Trade macht und wenn SL/TP ereicht ist wieder ein setzt?

Ich danke für die hilfe muss jetzt Arbeiten gehen bis morgen
euer Nefastus

next user 19.06.17 12:24

Zitat:

Zitat von Nefastus (Beitrag 38970)
Wie kann ich das so schreiben das er nur EIN Buy und Ein Sell Trade macht und wenn SL/TP ereicht ist wieder ein setzt?

Dann musst du halt eine Bedingung einfügen, die überprüft, ob es schon einen Trade gibt. Trifft dies zu, so erstellst du keinen
neuen und überprüfst dann, ob der SL/TP vom besagten Trade erreicht wurde.
Ein typischer Schalter.

Code:

bool schalter = false;

...
...

// Kaufsignal berechnen
if(!schalter)
{
  if(SMA7Array[0] > SMA50Array[0])
      if (SMA50Array[0] > SMA100Array[0])
      {
        trade.Buy(0.01,NULL,Ask,0,(Ask+10 * _Point),NULL);
      }
}
else
{
  //Hier dann Order selektieren und abfragen, ob der Stoploss/Takeprofit erreicht wurde...
  //Sollte nicht schwer sein.
}


Kronenchakra 20.06.17 23:19

Nur so ein kleiner Hinweis: das Handle eines Indikators in der OnTick() jedesmal neu zu erzeugen bremst die Performance enorm. Das gehört in die OnInit()!!!!
Code:

  // Definition der Eigenschafften fuer den SMA
  int SMA7Definition = iMA (_Symbol,_Period,7,0,MODE_SMA,PRICE_CLOSE);
      int SMA50Definition = iMA (_Symbol,_Period,50,0,MODE_SMA,PRICE_CLOSE);
        int SMA100Definition = iMA (_Symbol,_Period,100,0,MODE_SMA,PRICE_CLOSE);

Und warum rückst du das ein???

Die Bezeichnung der Variablen für die Handles würde ich auch anders nennen.
zB: int haSMA7, haSMA50, ha SMA100; // global definiert
Aber das ist Geschmackssache. :)

Nefastus 21.06.17 08:17

Warum es ist wie es ist?
Ich bin einer der das erst lernen muss / will
ich bin gelehrnter Schlosser und Schweißer
habe Famile und daher kaum Zeit
Irgend wie muss man ja mal anfangen auch wenn die Performance trunter leiden muss :D

Nefastus 21.06.17 08:41

Frage
 
Zitat:

Zitat von next user (Beitrag 38973)
Dann musst du halt eine Bedingung einfügen, die überprüft, ob es schon einen Trade gibt. Trifft dies zu, so erstellst du keinen
neuen und überprüfst dann, ob der SL/TP vom besagten Trade erreicht wurde.
Ein typischer Schalter.

Code:

bool schalter = false;

...
...

// Kaufsignal berechnen
if(!schalter)
{
  if(SMA7Array[0] > SMA50Array[0])
      if (SMA50Array[0] > SMA100Array[0])
      {
        trade.Buy(0.01,NULL,Ask,0,(Ask+10 * _Point),NULL);
      }
}
else
{
  //Hier dann Order selektieren und abfragen, ob der Stoploss/Takeprofit erreicht wurde...
  //Sollte nicht schwer sein.
}


reicht das wenn ich if (PositionsTotal()<10) über trade.Buy einsetze?
und sollte ich alles eher in ein Skript schreiben oder in einer Bibliothek setzen?

next user 21.06.17 12:33

Zitat:

Zitat von Nefastus (Beitrag 38989)
Irgend wie muss man ja mal anfangen auch wenn die Performance trunter leiden muss :D

Schon ok, jedoch würde ich dir am Anfang schon raten, kurz zu schauen wo die Unterschiede von "OnTick", "OnInit" ect. sind. ;)

Zitat:

Zitat von Nefastus (Beitrag 38990)
reicht das wenn ich if (PositionsTotal()<10) über trade.Buy einsetze?
und sollte ich alles eher in ein Skript schreiben oder in einer Bibliothek setzen?

Ich dachte, du willst immer jeweils nur EINE Order setzen, wieso sollen jetzt bis zu 10 gesetzt werden?
Wenn du eine Order setzen willst, solange es noch keine 10 sind, so würde ich es nicht über "trade.Buy" setzen.
Die beiden if-Abfragen über "trade.Buy" brauchen ja nicht ausgewertet werden, wenn bereits 10 Trades aktiv sind, also ersetze lieber
Code:

if(!schalter)
durch
Code:

if(PositionsTotal() < 10)
Zum zweiten Teil, gerade am Anfang und bei eher kleineren Sachen sind Bibliotheken (ich gehe mal davon aus, du meinst eine Header-Datei, mqh) nicht notwendig.

Nefastus 21.06.17 19:17

danke für die info
PS: die 0 ist ein schreibfehler -_-
kann mann auch Zeit angaben einbauen so wie Handel ab 9 - 18 Uhr und wechsel dann in ein anderes Skript?
bis später salü

next user 21.06.17 19:37

Zitat:

Zitat von Nefastus (Beitrag 38994)
PS: die 0 ist ein schreibfehler -_-

War das etwa so gemeint?
Code:

if(PositionsTotal() < 1)
Wenn ja, wieso nutzt du nicht einen Schalter, wie ich bereits erwähnt habe?
Zitat:

Zitat von Nefastus (Beitrag 38994)
kann mann auch Zeit angaben einbauen so wie Handel ab 9 - 18 Uhr

Klar. Schau mal in der Dokumentation. Die entsprechenden Zeiten dann verarbeiten ect...
Zitat:

Zitat von Nefastus (Beitrag 38994)
und wechsel dann in ein anderes Skript?

Wie hier bereits gesagt, wieso packst du es nicht in die "OnInit"?

Kronenchakra 21.06.17 23:05

Zitat:

Zitat von Nefastus (Beitrag 38989)
Warum es ist wie es ist?
Ich bin einer der das erst lernen muss / will
ich bin gelehrnter Schlosser und Schweißer
habe Famile und daher kaum Zeit
Irgend wie muss man ja mal anfangen auch wenn die Performance trunter leiden muss :D

Ist ja vollkommen ok :) wollte dich da nicht negativ kritisieren!
Ich finde es toll, daß du dich neben allen Verpflichtungen, weitebildest und wünsche dir viel Erfolg!
Bleib dran, Rom ist auch nicht an einem Tag erbaut worden.

Nefastus 22.06.17 00:15

Mach dir ma kein Kopf das hab ich gar nicht so aufgefasst^^
Ja lernen tuh ich gerade wirglich viel -_- auf Arbeit lerne ich auch noch den CNC PlasmaSchneider zu bedienen und Programmieren
ik wünsch dir was
salü:D

Kronenchakra 22.06.17 00:21

Hey, Plasmaschneider sind super. Hab einen von Stahlwerk für laue €400. Ist ideal für meine Basteleien, ist halt nicht CNC gesteuert :D

Nefastus 22.06.17 00:21

[QUOTE=next user;38996]War das etwa so gemeint?
Code:

if(PositionsTotal() < 1)
Wenn ja, wieso nutzt du nicht einen Schalter, wie ich bereits erwähnt habe?

finde in der mql5 Handbuch nichts über ein Schalter nur Umschalteroperator switch xD
ich google morgen nach der Arbeit mal
gute Nacht

Nefastus 22.06.17 00:23

Zitat:

Zitat von Kronenchakra (Beitrag 39002)
Hey, Plasmaschneider sind super. Hab einen von Stahlwerk für laue €400. Ist ideal für meine Basteleien, ist halt nicht CNC gesteuert :D

oh wie süß wir schneiden bis 200mm xD
muss leider in Betchen :D

next user 22.06.17 10:55

Zitat:

Zitat von Nefastus (Beitrag 39003)
finde in der mql5 Handbuch nichts über ein Schalter nur Umschalteroperator switch xD

Sorry, hab ich etwas blöd formuliert. Ich meinte einfach eine Variable vom Typ bool, welche ja nur zwei Zustände (true und false) haben kann,
also quasi ein "Schalter". Wenn die Variable "false"
Code:

bool schalter = false;
...
...
if(!schalter)

ist, so wurde noch keine Order gesetzt. Dann setzt du deine Order und die bool-Variable auf true.

Nefastus 25.06.17 01:43

Habe leider noch nicht herausgefunden wie du das meinst mit dem schalter^^
mit dem sollte das auch klappen?

if(PositionsTotal()==0 && OrdersTotal()==0)

und wie viele Indikatoren sollte man verwenden und z.B.welche
zur Zeit experimentiere ich mit SMA und EMA 21, 34, 144, 237
+ MacD

next user 25.06.17 03:47

Zitat:

Zitat von Nefastus (Beitrag 39034)
Habe leider noch nicht herausgefunden wie du das meinst mit dem schalter^^

Es gibt ja unterschiedliche Datentypen
Code:

int // Für ganze Zahlen
double // Für Gleitpunktzahlen
string // Für Text
...

Genau so gibt es auch den Datentyp "bool", welcher nur 2 Zustände (true & false) haben kann. Dabei wird "0" als false, alles andere als true interpretiert.

Jetzt definierst du einfache eine Variable mit dem Typ "bool" und setzt sie beim Start auf false
Code:

bool deineVariable = false;
dann fragst du sie ab
Code:

if(!deineVariable) //ist deineVariable = false ?
{
  //Order setzen und deineVariable auf true setzen
  ...
  deineVariable = true;
}
else //Wenn deineVariable = true, dann gibt es schon eine Order
{
  //Code der ausgeführt wird, wenn er keine neue Order setzen soll
}

Zitat:

Zitat von Nefastus (Beitrag 39034)
mit dem sollte das auch klappen?
Code:

  if(PositionsTotal()==0 && OrdersTotal()==0)

1. Beide Funktionen mache das selbe. Deren gleichzeitige Verwendung ist sinnlos.
2. Da du hier im MQL5-Bereich bist, gehe ich mal davon aus, dass du auch in MQL5 entwickelst. Somit wäre nur die erste Funktion relevant.
3. Mach es wie ich schon mehrmals gesagt habe, mit einer Bool-Variablen. Dann entfallen deine unnötigen Funktionsaufrufe.

Du brauchst ja nur 2 Zustände (Order ja / Order nein), deshalb auch der Variablentyp "bool" mit seinen 2 möglichen Zuständen.
Deshalb habe ich es "Schalter" gennant.

Zitat:

Zitat von Nefastus (Beitrag 39034)
und wie viele Indikatoren sollte man verwenden und z.B.welche
zur Zeit experimentiere ich mit SMA und EMA 21, 34, 144, 237
+ MacD

Weder die Anzahl der Indikatoren, welche jemand nutzt, noch die Indikatoren, die er nutzt haben für dich eine "gute" Aussagekraft.

1. Einige schwören auf möglichst viele Signale, anderen stört es eher.
2. Einige schwören auf den und den Indikator, andere finden den unbrauchbar.

Natürlich sind Indikatoren wie gleitende Durchschnitte oder der RSI hilfreich, allerdings würde ich dir raten, einfach mal zu
schauen, was welcher Indikator macht und dir dann die für dich interessanten rauszupicken.


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:16 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum