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

 

sss2019, keine Zeit, sich jetzt damit zu befassen, tut mir leid.

Zhunko:
Falsch. Richtig, wie oben gezeigt.

Sobald ich dazu komme, werde ich es korrigieren und den Code im Beitrag dort bearbeiten.

Frage. Wie erhalte ich einen Zeiger auf eine Zeichenkette? Der MQL4-String ist C++ lpsz, soweit ich das verstanden habe. Aber wie kommt man an die eigentliche String-Adresse?

 
Ich habe eine Idee, wie man ein und denselben EA mit verschiedenen Assistenten arbeiten lassen kann. Das Problem ist, dass der Roboter, wenn es eine Sperre gibt, diese Situation separat behandeln wird, ohne andere Aufträge zu beeinträchtigen. D.h. wir haben eine Position bei Bay (Magie 001) geöffnet, der Markt ging gegen uns und anstatt das Geschäft zu schließen, öffnet sich das entgegengesetzte Geschäft bei Sell mit Magie 001 und der Roboter wird diese Situation liquidieren, aber um zu vermeiden, dass ich lange warte, um die Situation zu liquidieren, möchte ich wieder Bay öffnen, aber bereits mit Magie (002) und wenn der Trend nicht erfolgreich ist, wird das Schloss mit der Magie (002) wieder Sell mit (002) öffnen, usw. Können Sie sagen, wie man Geschäfte wie folgt mit verschiedenen magischen Paaren funktionieren lässt?
 
pasha5282:
Wenn ich eine Idee, wie man ein und derselbe EA Arbeit mit verschiedenen Assistenten zu machen. der Roboter sollte separat behandeln diese Situation, wenn eine Sperre auftritt und nicht mit anderen Aufträgen stören. D.h. wir haben eine Position bei Bay (Magie 001) geöffnet, der Markt ging gegen uns und anstatt das Geschäft zu schließen, öffnet sich das gegenüberliegende Geschäft bei Sell mit Magie 001 und der Roboter kümmert sich um die Situation und ich möchte wieder Bay öffnen, aber mit Magie (002), um nicht lange zu warten, um sich darum zu kümmern und im Falle, dass der Trend nicht erfolgreich ist, öffnet sich wieder das Sell-Schloss mit Magie (002) usw. Irgendein Rat, wie man Geschäfte als Layer mit verschiedenen Magien arbeiten lässt? Oder wie man es implementiert?
int MagicNumber=001;
//---
if (OrdersTotal()>0) // проверяем, есть ли ордера
{  for (int i=OrdersTotal()-1; i>=0; i--) // перебор ордеров
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // выбирается ордер среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // проверяем - ордер по текущему символу?
         if (OrderMagicNumber()!=MagicNumber) continue; // проверяем - ордер с нужным магиком?
         //---
         if (OrderType()==OP_BUY) // если это открытая позиция на покупку, то ...
           {  // ... какие-то действия
                 return(0);
           }
         //---
         else
         if (OrderType()==OP_SELL) // если это открытая позиция на продажу, то ...
           {  // ... какие-то действия
                 return(0);
           }
}  }  }

Beispiel eines Zählers für offene und schwebende Aufträge nach dem gewünschten Symbol und Magier

string _Symbol="AUDUSD";
int MagicNumber=555;
//---
int Opened_pos=0;
if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==_Symbol)
         {  if (OrderMagicNumber()==MagicNumber)
            Opened_pos++;
}  }  }  }
 

Aus irgendeinem Grund ist das Terminal während des Tests abgestürzt. Wenn man ihn jetzt einschaltet, verbraucht er etwa 150 MB Speicher und hängt sich auf. Ich wollte neu installieren, habe aber vorher alle meine Dateien verschoben. Als ich die Ordner öffnete, stellte ich fest, dass nicht alle Dateien, die ich erstellt hatte, vorhanden waren. Wo ist der Rest von ihnen?


 
silhouette:

Aus irgendeinem Grund ist das Terminal während des Tests abgestürzt. Wenn man ihn jetzt einschaltet, verbraucht er etwa 150 MB Speicher und hängt sich auf. Ich wollte neu installieren, habe aber vorher alle meine Dateien verschoben. Als ich die Ordner öffnete, stellte ich fest, dass nicht alle Dateien, die ich erstellt hatte, vorhanden waren. Wo sind die anderen?

Der linke Screenshot ist MQL5 und nicht 4.
 
gyfto:

sss2019, keine Zeit, sich jetzt damit zu befassen, tut mir leid.


Sobald ich dazu komme, werde ich es korrigieren und den Code im Beitrag dort bearbeiten.

Frage. Wie erhalte ich einen Zeiger auf eine Zeichenkette? Der MQL4-String ist C++ lpsz, soweit ich das verstanden habe. Aber wie bekomme ich die Adresse der Zeichenkette selbst?

Es gibt keine Möglichkeit, dies in MQL4 zu tun. Sie können die Zeichenfolge an die DLL übergeben und die Adresse als INT zurückgeben.
 
paladin80:
Der linke Screenshot ist MQL5, nicht 4.

Nein, es ist die vierte. Wenn Sie auf die vierte Datei klicken, öffnet sich aus irgendeinem Grund die fünfte Datei.
 
silhouette:
Nein, die vierte. Es ist nur so, dass die Dateien der vierten, wenn sie angeklickt werden, aus irgendeinem Grund durch die fünfte geöffnet werden

MetaEditor für 5 öffnen, im linken Fenster "Navigator" -> auf einen Ordner rechte Maustaste -> "Ordner öffnen" und dort unter den Ordnern versuchen zu suchen.



 
Zhunko:
Es gibt keine Möglichkeit, dies in MQL4 zu tun. Sie können einen String an eine DLL übergeben und die Adresse als INT zurückgeben.

//C++
#include "stdafx.h"
#include <windows.h>
#define MT4_EXPFUNC __declspec(dllexport)
struct MqlStr {
   int               len;
   char             *string;
  };
BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    return TRUE;
}
MT4_EXPFUNC int __stdcall GetStrAddress(const char *str) {    
    MqlStr* s = (MqlStr*)str;
    return (int)s->string; 
}

//MQL4

#import "StrAddress.dll"
int GetStrAddress(string str);//на входе имя инициализированной строки, на выходе её адрес
#import
//объявляем:
string s="something";
int address;
//пример использования:
int start(){
   address=GetStrAddress(s);
   Print(" адрес s равен " s);
}

Damit es anderen nicht so ergeht, habe ich das gesamte gezippte Projekt beigefügt. Mit Quellen, damit andere sehen können, dass es sich nicht um einen Virus handelt. Ich hatte keine Zeit zu prüfen, was von VC++ 6.0 kompiliert wird und was Müll ist. StrAddress.dll befindet sich im Ordner Debug.

Dateien:
straddress.zip  984 kb
 
paladin80:

MetaEditor für 5 öffnen, im linken Fenster "Navigator" -> rechter Mausklick auf einen Ordner -> "Ordner öffnen" und dort unter den Ordnern versuchen zu suchen.



Danke, aber dort ist nichts von mt4 aufgetaucht. Die Suche hat alle Dateien unter der folgenden Adresse gefunden:

C:\Benutzer\Qwer\AppData\Lokal\VirtualStore\Programmdateien\MetaTrader 4\Experten\include

Um ehrlich zu sein, habe ich keine Ahnung, wie sie dorthin gekommen sind, da sie zuvor ordnungsgemäß gespeichert wurden.