[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 483

 

Ich danke Ihnen! Der Code ist jetzt einfacher. Sicherlich einfacher.

Danke für den Ausrutscher!

Die Schleife for (int A = 0; A <100 ; A++) // wir brauchen diese Suche nach Balken nicht, sie hilft mir nur, aus dem Log zu sehen, dass der EA Aufträge genau dort platziert hat, wo die Pfeile sind oder wo die Fehlernummer ist. Der Punkt ist, dass es keine Signale im Prüfgerät gab. Auf denselben Ausdrucken sah ich, dass die Variablen arrow1 und arrow2 auf allen Balken nur Null waren, und so kam ich aus dieser Situation heraus.

Der Zyklus kann natürlich in beide Richtungen gezählt werden. Aber auch hier sehe ich überall den Fehler 129! Ich sehe die Pfeile des Indikators im Diagramm und möchte mich vergewissern, dass die Aufträge von ihnen platziert worden sind. Also, auf dem Screenshot am Anfang sind die Variablen Pfeil 1 und 2 gleich, weiter auf 17 Balken von Null, die Reihenfolge ist festgelegt - okey, super! Dann meldet der Drucker, dass es einen Verkauf mit so-und-so-Tick gibt, und die Pfeile auf weiteren Balken sind gleich - toll!!!!

 
Als Nächstes müssen Sie einen Verkauf auf dem roten Pfeil löschen und einen Kauf platzieren. Plötzlich werden zwei Aufträge gelöscht!!! Zwei Aufträge, der eine, der eindeutig festgelegt ist, und ein anderer, der nicht da zu sein schien!!! Na gut, zum Teufel damit... Der Fehler 129 wird angezeigt, und es gibt keinen Auftrag. Es tut mir leid, wenn ich all die guten freiwilligen Helfer so verwirrt habe.
 
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot         = 1;                          
  extern int     taymfreym   = 0 ;                           
  extern double  stoplos     = 200 ;                          
  extern double  takeprofit  = 500 ; 
  extern int     magicnumber = 350;
  extern int     ControlBar  = 1;      // номер бара на котором снимаем показания индикатора                     


void BreakPoint()
{//if (!IsVisualMode()) return(0);
    keybd_event (19,0,0,0);
    Sleep (10);
    keybd_event (19,0,2,0);
}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
{
  //Print (   "  Начало " ); 
//----
    for (int A = 0; A <100 ; A++) // ни к чему этот перебор баров
    {
        double strela1 = iCustom (NULL, taymfreym, "индикатор", 2, A),
               strela2 = iCustom (NULL, taymfreym, "индикатор", 3, A);
        int BUY = 0, SELL = 0, ticket; 
        Print (A, "  strela1 " , strela1 , "    strela2  " , strela2);
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {  
        if (!OrderSelect (i - 1, SELECT_BY_POS)) continue;  // Если есть следующий
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber() != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        ticket = OrderTicket();
        if (type == 0) {BUY++; Print ("BUY++   " , BUY  ,"  ticket ", ticket); break;}
        if (type == 1) {SELL++; Print ("SELL++   " , SELL  ,"  ticket ", ticket); break;}
    }
    if (strela1 < strela2)
    {
        if (SELL > 0) udalenie (OP_SELL);
        if (BUY == 0)
        {
            OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
            Print ("strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
            NormalizeDouble ( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits));
        }
    }
    else if (strela1 > strela2)
    {
        if (BUY > 0) udalenie (OP_BUY);
        if (SELL == 0)
        {
            OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print ("strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
            NormalizeDouble (Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits);
        }
    }
    }
    BreakPoint();     
//----
    return (0);
}
//+------------------------------------------------------------------+

void udalenie (int Type = -1)
{
    int total = OrdersTotal();
    for (i = total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber( ) != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        if (Type > -1) if (Type != type) continue;
        bool result = false;
        switch (type)
        { 
            case OP_BUY       : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
            case OP_SELL      : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
        }
        if (!result)
        {
            int error =  GetLastError(); 
            string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
            Print (errorcomment);
        }  
    }       
}
 
Warten Sie, entschuldigen Sie, ich lege die Zettel überall hin!
 
Dimka-novitsek:
Als Nächstes müssen Sie einen Verkauf auf dem roten Pfeil löschen und einen Kauf platzieren. Plötzlich werden zwei Aufträge gelöscht!!! Zwei Aufträge, der eine, der offensichtlich eingestellt ist, und ein anderer, der nicht da zu sein scheint!!! Na gut, zum Teufel damit... Der Fehler 129 wird angezeigt, und es gibt keinen Auftrag. Sie werden mir verzeihen, dass ich all die guten freiwilligen Helfer verwirrt habe...

Dimka - gib mir deinen Code in meiner persönlichen Nachricht - ich werde herumspielen - ich habe nichts zu tun, während mein"Gral" getestet wird ... und mein Gehirn braucht ein Workout... Und vergessen Sie den Genuss nicht...
 

Hallo zusammen, ich bin ein Neuling, also schmeißt mich bitte nicht wild. Es haben sich ein paar Fragen angesammelt.

1) Wo kann ich die vollständige Historie der Angebote herunterladen? Ich habe verstanden, dass im MT4-Terminal Kurse von MetaQuotes standardmäßig heruntergeladen werden, aber es gibt eine Lücke von Januar 2012 bis Oktober 2012, und sie wird nicht geschlossen, wenn sie erneut heruntergeladen wird. Dies stellt die gesamte Geschichte von dort aus in Frage.

2) Die Geschichte hat Daten vor 1999, die Daten für sie einige seltsame, sehr wenige, auch von Minuten. Werden sie überhaupt beachtet oder gelöscht?

3) Und noch ein anderer Unsinn ist mit dem Test im Gange. Ich beschloss zu versuchen, einen einfachen Expert Advisor zu schreiben: Kaufen, wenn Open[1]<MA1 && Close[1]>MA1. Beim Testen zeigt der MA (exponentiell) immer unterschiedliche Werte an, je nach dem Datum des ersten Tests. Dabei ist der Fehler umso größer, je länger die МА-Periode ist (z. B. 1000-1200). Wo liegt das Problem?

 
Dimka-novitsek:

Ich danke Ihnen! Der Code ist jetzt einfacher. Sicherlich einfacher.

Danke für den Ausrutscher!

Die Schleife for (int A = 0; A <100 ; A++) // wir brauchen diese Suche nach Balken nicht, sie hilft mir nur, aus dem Log zu sehen, dass der EA Aufträge genau dort platziert hat, wo die Pfeile sind oder wo die Fehlernummer ist. Der Punkt ist, dass es keine Signale im Prüfgerät gab. Auf denselben Ausdrucken sah ich, dass die Variablen arrow1 und arrow2 auf allen Balken nur Null waren, und so kam ich aus dieser Situation heraus.

Der Zyklus kann natürlich in beide Richtungen gezählt werden. Aber auch hier sehe ich überall den Fehler 129! Ich sehe die Pfeile des Indikators im Diagramm und möchte mich vergewissern, dass die Aufträge von ihnen platziert worden sind. Also, auf dem Screenshot am Anfang sind die Variablen Pfeil 1 und 2 gleich, weiter auf 17 Balken von Null, die Reihenfolge ist festgelegt - okey, super! Dann meldet der Drucker, dass es einen Verkauf mit so-und-so-Tick gibt, und die Pfeile auf weiteren Balken sind gleich - toll!!!!

Über den Zyklus:

for (int A = 0; A <100 ; A++)

Bevor Sie etwas tun (Code schreiben), müssen Sie eine klare Vorstellung davon haben, was Sie erreichen wollen. Sie haben diesen Indikator auf jedem Tick, und Sie können ein vollständiges Layout seiner Messwerte haben. Auf diese Weise (Schleife) erhalten Sie in den Variablen strela1 und strela2 die Werte des 100. Taktes, und Sie können nach diesen Werten handeln (letzter Winter)... :))) Ich habe nicht sofort darauf geachtet - Sie haben Handelsoperationen in die Schleife der Indikatorwerte aufgenommen - ein totaler P... Das wissen Sie natürlich am besten. :)))

 
Nein, ich brauche die Schleife, um den Ein- und Austritt zu sehen, d. h. um den Roboter zu testen. Wie sie Aufträge erteilt, wie sie Fehler macht. Nun, es wird nicht im Testgerät getestet...
 
Dimka-novitsek:
Nein, ich brauche die Schleife, um den Ein- und Austritt zu sehen, d. h. um den Roboter zu testen. Wie sie Aufträge erteilt, wie sie Fehler macht. Es wird nicht im Tester getestet...

Was soll ich sagen - GENIAL... Viel Glück!

P.S. In meinem Code fand einen kleinen Fehler im Zusammenhang mit der Änderung der Richtung der Aufzählung von Aufträgen, auch reduziert den Code, sowie einen Versuch zu schaffen Optimierbarkeit in der Tester (überprüfen Sie es selbst).
Und ich habe den Verdacht, dass Sie die Daten des Indikators nicht richtig ablesen. Der Indikator hat mehrere Puffer (4 in meiner Version). Einige, wie die, die Pfeile zeichnen, haben einen Wert NUR dort, wo der Pfeil ist. Um in solchen Puffern nach Signalen zu suchen, müssen Sie eine Schleife (while()) mit der Bedingung einrichten, dass der Rückgabewert nicht gleich einem "leeren" Wert ist (in meiner Variante EMPTY_VALUE). Wenn "keine Pfeile" (in diesen Puffern) vorhanden sind, muss das Signal durch Vergleich des Rückgabewerts mit dem Preis gesucht werden.

Dateien:
lxvhlxyx.mq4  5 kb
 

Guten Tag oder Nacht! Eine Frage an die mt4-Entwickler und auch an alle anderen.

Was sind die Mindestsystemanforderungen für den MT-Client?

Ich möchte es auf meiner alten Hardware laufen lassen: Athlon 800mg, 512mb, XP SP3. Wenn ich MT 4 oder 5 laufen lasse, schaltet er sich nach 2 Sekunden ab. Das Problem liegt eindeutig nicht im Windup oder der Hardware, auf dieser Hardware läuft Visual Studio mit Debugger (ich bin selbst Programmierer), und die Ausnahme tritt nicht im System auf (da mein Debugger nicht funktioniert). Ich vermute, dass dem Kunden selbst etwas nicht gefällt und er daraufhin die Seite schließt. So die Frage, was ist der Grund und was mt nicht mag, wirklich CPU-Frequenz ? ))

Grund der Beschwerde: