Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 150

 
yaaarik777:

Guten Abend!

Bitte helfen Sie mir, den Code zu schreiben, ich glaube nicht, dass ich es selbst tun können, hier ist die Quintessenz:


Die Quintessenz ist, dass wir hier in diesem Thread den Leidenden und Suchenden helfen wollen.
Wenn Sie es für Sie tun müssen - das ist ein Freiberufler. Und um Ihnen zu helfen, zu sagen, was Sie erreichen wollen, zeigen Sie, was Sie getan haben, und beschreiben Sie, was misslungen ist.
 
Maxim Kuznetsov:
Es geht darum, dass wir hier in diesem Thread den Leidenden und Suchenden helfen wollen.
Wenn Sie es für sich selbst tun müssen - das liegt an der Freiberuflichkeit. Und um Hilfe zu bekommen, müssen Sie sagen, was Sie erreichen wollen, zeigen, was Sie tun, und beschreiben, was misslungen ist.


Der Punkt ist, ich verstehe nicht, wie man den EA dazu bringt, nur die Aufträge eines bestimmten Paares zu analysieren und nicht die Aufträge aller Paare im Terminal.

Wenn Sie können, geben Sie mir bitte eine Idee oder ein Codebeispiel, denn in den Lehrbüchern wird zwar beschrieben, was funktioniert und wie es funktioniert, aber es gibt nicht viele konkrete Beispiele.

Ich wäre Ihnen für Ihre Hilfe dankbar.

Ich danke Ihnen.

 
Hallo.
Es ist lange her, dass ich mit Damespielen angefangen habe, und als ich es tat, stellte sich heraus

Ich weiß nicht, wie man spielt.
Ich bitte um Hilfe.
Es gibt einen guten altmodischen EA, der den ZigZag-Indikator von Rosh verwendet
Und sie funktioniert einwandfrei als Schweizer Uhr.
Es hat den Code nicht zum Herunterladen der Expert Advisor am Ende des Textes gegeben beigefügt.

Die Idee des EA war, dass die Aufträge im Moment der Bestellung geöffnet und geschlossen werden.

Zusammentreffen von verschiedenen ZigZags.
Jetzt muss ich den Rosh-Indikator durch einen anderen ersetzen

Indikator, auch eine der ersten Versionen von ZigZag aus der Zeit des MT3.
Aber dieser Indikator hat einen anderen Algorithmus der ZigZag-Zeichnung.

Sein Name ist High_Low v2 (ZigZag), (im Anhang ist der Name aus irgendeinem Grund ausgefallen)

Nach der Bauchgefühl-Methode, die manchmal funktionierte, habe ich einfach die Bedingungen geändert
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0);
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0);
auf
double zz1 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0);

double zz2 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0);

D.h., ich habe den Namen eines benutzerdefinierten Indikators und dessen

Bei den Fraktalen zum Beispiel hat es bei mir funktioniert.

.
Die Parameter sind gleich, denn zwei Zickzacklinien müssen nicht identisch sein.

Ich habe keine Zufälligkeit von Zigzags gebraucht, ich brauche nur die Tatsache ihrer Variation.
Ich habe die Zahl 60 durch 0 ersetzt, damit sie in allen TFs funktioniert.

Nach der Ersetzung wurde der EA ohne Fehler kompiliert, aber er weigert sich stark, zu funktionieren, wenn er an

Außerdem funktioniert sie im Strategy Tester nicht.

nicht arbeiten will.

Die Frage ist: Was ist los?
Und noch eine Frage: Was ist der richtige Weg?
Danke, entschuldigen Sie den langen Text.


//+------------------------------------------------------------------+
//| ZZ.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp.
#property link "http://www.metaquotes.net"

#include <stdlib.mqh>

#define MAGIC 20110220

extern double TakeProfit = 50;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//----
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
zurück(0);
}
//+------------------------------------------------------------------+
Offene Positionen berechnen //|
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int pos=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL) pos++;
}
}
//---- Rücksendeauftragsvolumen
if(pos>0) return(pos)
}
//+------------------------------------------------------------------+
//| Prüfung auf offene Auftragsbedingungen |
//+------------------------------------------------------------------+
void CheckForOpen()
{
int res;

//---- get ZZ
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0);
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0);
//---- Kaufbedingungen
if(CompareDoubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])
{

res=OrderSend(Symbol(),OP_BUY,1,Ask,3,0,Ask+TakeProfit*Point,"",MAGIC,0,Bl

ue);
Rückkehr;
}
//---- Verkaufsbedingungen
if(CompareDoubles(zz1,High[0]) && CompareDoubles(zz2,High[0])
{

res=OrderSend(Symbol(),OP_SELL,1,Bid,3,0,Bid-TakeProfit*Point,"",MAGIC,0,Re

d);
Rückkehr;
}

//----
}
//+------------------------------------------------------------------+
//| Prüfung auf enge Auftragsbedingungen |
//+------------------------------------------------------------------+
void CheckForClose()
{
//---- get ZZ
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0);
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0);
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) weiter;
//---- Auftragsart prüfen
if(Auftragsart()==OP_BUY)
{
if(CompareDoubles(zz1,High[0]) && CompareDoubles(zz2,High[0])

OrderClose(OrderTicket(),OrderLots(),Bid,3);
Pause;
}
if(OrderType()==OP_SELL)
{
if(CompareDoubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
Pause;
}
}
//----
}
//+------------------------------------------------------------------+
//| Startfunktion |
//+------------------------------------------------------------------+
void start()
{
//---- check für Geschichte und Handel
if(Bars<100 || IsTradeAllowed()==false) return;
//---- berechnet offene Aufträge nach aktuellem Symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
sonst CheckForClose();
//----
}
//+------------------------------------------------------------------+













MetaQuotes Software Corp.
MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 - это бесплатный инструмент трейдера, позволяющий торговать на форексе и фондовых биржах.
Dateien:
 
yaaarik777:


Der Punkt ist, dass ich nicht verstehe, wie man den EA nur Aufträge eines bestimmten Paares zählen lässt und nicht die Summe aller Paare im Terminal.

Ich verstehe nicht, wie man einen EA dazu bringt, nur die Aufträge eines bestimmten Paares zu berechnen, und nicht die Summe aller Paare im Terminal.

Ich wäre für Hilfe sehr dankbar.

Ich würde das zu schätzen wissen.

schauen Sie ruhig in die CodeBase - jeder EA hat eine Bestellschleife :-)

Zum Beispiel https://www.mql5.com/ru/code/16588 (die erste, die ich gefunden habe)

  for(int index = orders-1; index >= 0; index--)
      {
      if(OrderSelect(index,SELECT_BY_POS,MODE_HISTORY)==false)
         {
         Print("Error in history!");
         break;
         }
      if(OrderSymbol()==symbol && OrderMagicNumber()==MAGICMA)
         {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
            {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0) losses++;
            }
         }
      }

die Bedingung"if(OrderSymbol()==Symbol && OrderMagicNumber()==MAGICMA)" ist genau das, was die Aufträge nach einem bestimmten Symbol und mit einer bestimmten MAGIC auswählt

PS/ im obigen Copy-Paste-Code ist die Unterbrechung im Falle eines OrderSelect-Fehlers nicht ganz korrekt, verwenden Sie lieber continue (egal was der Grund ist, die Order wird nicht ausgewählt, vielleicht gibt es ein Problem mit einem internen MetaTrader-Mechanismus, aber die nächste Order wird nicht übersprungen)

Middle Moving Average
Middle Moving Average
  • Stimmen: 6
  • 2016.10.18
  • Dmitriy Kudryashov
  • www.mql5.com
Вариант советника, основанного на среднем значении цены для расчета Moving Average.
 
Maxim Kuznetsov:

schauen Sie ruhig in die CodeBase - jeder EA hat eine Bestellschleife:-)

Zum Beispiel https://www.mql5.com/ru/code/16588 (die erste, die ich gefunden habe)

Es steht nicht nur in CodeBase, sondern auch in einem der beiden Threads im Forum. Das Wichtigste ist, dass man anfängt zu suchen, und es gibt über hundert davon in verschiedenen Interpretationen.
 
Danke, ich werde Sie besuchen
 

Hallo Leute!!! Helft mir eine Funktion zu schreiben, die ein Kauf- oder Verkaufssignal zurückgibt. Ich weiß noch nicht, wie man mit Balken in MQL arbeitet (obwohl ich vieles nicht weiß!).

Die Bedingung ist folgende: Der übergeordnete Balken ist ein Balken, in dem sich innerhalb des Hochs und des Tiefs ein Balken mit dem Schlusskurs befindet (es ist wichtig!!! genau der Schlusskurs.) Sobald ein Balken den übergeordneten durchstößt und über dem Hoch oder unter dem Tief schließt, wird er nun zum übergeordneten Balken!

Wenn der Schlusskurs des übergeordneten Balkens höher ist als der Eröffnungskurs, geben wir das Kaufsignal zurück.

Wenn der Schlusskurs des Hauptbalkens niedriger ist als der Eröffnungskurs, geben wir das Signal zum Verkauf.

Es ist sehr wichtig, den Zeitrahmen in der externen Variable festzulegen.

Aber hier ist das Problem, zumindest für mich, wie kann der Expert Advisor finden die letzte matte bar auf dem Chart? Ja, visuell kann ich es sofort sehen! ....

Es wäre praktisch, wenn ich den Index des letzten MAT-Balkens in einer externen Variablen angeben könnte und die Funktion dann von dort aus zu tanzen beginnen würde; oder eine andere Variante wäre, einen Balken mit dem Index von z.B. 50 zu nehmen und die Schleife bis Null durchzugehen.

Bitte sehr, helfen Sie dem Waisenkind!!!

 

Guten Tag!

Können Sie mir eine Idee geben? Wir brauchen einen EA, der nicht in der Lage ist, eine Order zu eröffnen, wenn bereits eine Order zu diesem Preis eröffnet wurde. Wie wird die Kontrolle durchgeführt?

 
Kot:

Guten Tag!

Können Sie mir eine Idee geben? Wir brauchen einen EA, der nicht in der Lage ist, eine Order zu eröffnen, wenn bereits eine Order zu diesem Preis eröffnet wurde. Wie wird die Kontrolle durchgeführt?

Dies ist eine schwierige Aufgabe. Aus Verzweiflung habe ich angesichts des Schlupfes dem desired_price/_Point einen magischen Auftrag zugewiesen.

In mql5 ist es viel einfacher: Es gibt eine Position mit einem Preis, der nicht dem gewünschten Preis entspricht, und einen Auftrag mit dem gewünschten Preis.

 
Kot:

Guten Tag!

Können Sie mir eine Idee geben? Wir brauchen einen EA, der nicht in der Lage ist, eine Order zu eröffnen, wenn bereits eine Order zu diesem Preis eröffnet wurde. Wie wird die Kontrolle durchgeführt?


Sie schreiben eine Auftragsschleife, in der Sie den Eröffnungskurs jedes Auftrags mit dem angegebenen Kurswert vergleichen, und wenn es eine Übereinstimmung gibt, dann wird das Kennzeichen für einen neuen Auftrag nicht gesetzt.
Grund der Beschwerde: