[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 254

 
Desead:
Wenn man früher im Editor mit dem Mauszeiger über ein reserviertes Wort fuhr und die Taste f1 drückte, öffnete sich unten ein Fenster mit einer Beschreibung der Funktion, jetzt nicht mehr. Was könnte das Problem sein?
Zuvor haben Sie CTRL+F1 gedrückt.
 
Wer kann mir sagen, wie ich das Ergebnis immer positiv gestalten kann? (Gekaufte Lose - Verkaufte Lose)= -0,25, aber ich möchte, dass es immer positiv ist?
 
mikanit:
Wer kann mir sagen, wie ich das Ergebnis immer positiv gestalten kann? (Gekaufte Lose - Verkaufte Lose)= -0,25, aber es muss immer positiv sein ?
MathAbs().
 

Ich mache das so: if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)())

Was steht in Klammern?

 

wenn (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)(??????))

Wo ???? was?

 
Danke, das ist erledigt.
 

Ich eröffne eine Position mit einem Volumen = 0,05. Benötige einen Code - wie reduziert man das Positionsvolumen um 0,01, wenn ein Verlust 100 Pips für 5 Stellen erreicht?

Ich danke Ihnen.

 

Wie viele EAs ich auch geschrieben habe, alle überprüfen die Marktbedingungen (Stoplevel, Spread, etc.) beim Handel mit Aufträgen. Ich habe mir angeschaut, wie Gridder geschrieben werden, aber ich habe nicht gesehen, dass sie den Wert der gleichen Haltestellen-Nivellierung vor dem Senden eines Auftrags überprüfen. Was ist der Grund dafür?

 
alsu:

Im Forum gibt es eine Fülle von Berichten über den Tester und darüber, warum seine Ergebnisse von denen des wirklichen Lebens abweichen. Schauen Sie in der Rubrik Artikel nach, dieses Thema wurde bereits mehrfach angesprochen.

Ich danke Ihnen.
 

Ich habe eine Alternative gefunden.

alsu:

Das bedeutet, dass in der DLL der String genau als char* übergeben wird, aber nicht als MqlStr. Das bedeutetabernicht, dass im ex4-Programm der String nicht als MqlString gespeichert wird. Im Allgemeinen ist die Übertragung von Parametern von ex4 zu dll (laut den Entwicklern) ein ziemlich komplexer Prozess, der von allen möglichen Prüfungen und Umwandlungen von Parametern begleitet wird.

Zhunko:

Haben Sie die MQL4-Referenz gelesen? MQL4-string ist dasselbe wie c-string mit Null-Terminator.

Die Struktur ist nur für die Anordnung von Arrays von Strings konzipiert. Eine reine Erfindung der Metaquotes, um die Erstellung von String-Arrays zu erleichtern.

StrStrA aus der Bibliothek shlwapi.dll. Test:

#property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString(int integer_number);//это для перевода десятичного формата в шестнадцатеричный, используем в print.
#import "StrAddress.dll"
int GetStrAddress(string szStr);//из самописной dll.
#import "shlwapi.dll"
int StrStrA(string pszFirst, string pszSrch);//из WinAPI.
#import

int addr1;//будет выходной переменной для функции из самописной dll.
int addr2;//то же самое для функции из WinAPI.

int init()
  {//тестовый прогон; в init(), это чтобы не повторялось
   string s; strAddress (s);
   s=""; strAddress (s);
   s=s+"something"; strAddress (s);
   s="MyStr"; strAddress (s);
   s="mystr"; strAddress (s);
   return(0);
  }

int start()
  {
   int    counted_bars=IndicatorCounted();//оставляем блок пустым
   
   return(0);
  }

void strAddress (string myStr)//тестовая функция
  {
   addr1=GetStrAddress(myStr);//эта из dll
   addr2=StrStrA(myStr,myStr);//эта из WinAPI
   Print(" строка ", CharToStr(34), myStr, CharToStr(34), " указатель 1: ", IntegerToHexString(addr1), ", указатель 2: ", IntegerToHexString(addr2));//в лог
  }

Protokoll:

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 043 BE440, указатель 2: 00000000
строка "something" указатель 1: 043 C8970 указатель 2: 043 C8970
строка "MyStr" указатель 1: 043 BE450, указатель 2: 043 BE450
строка "mystr" указатель 1: 043 BE458, указатель 2: 043 BE458

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 01 C980E0, указатель 2: 00000000
строка "something" указатель 1: 01 CDD050, указатель 2: 01 CDD050
строка "MyStr" указатель 1: 01 C980F0, указатель 2: 01 C980F0
строка "mystr" указатель 1: 01 C980F8, указатель 2: 01 C980F8

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 01 CAFF20, указатель 2: 00000000
строка "something" указатель 1: 01 CA7100, указатель 2: 01 CA7100
строка "MyStr" указатель 1: 01 CAFF30, указатель 2: 01 CAFF30
строка "mystr" указатель 1: 01 CAFF38, указатель 2: 01 CAFF38

Der Mechanismus ist wie folgt. Shlwapi.dll in /system32. StrStrA ist ein WinAPI-Analogon vonStringSubstr. MQL4 ist eine typlose Sprache. Wenn wir also an der Ausgabe einen int anstelle eines Strings setzen, erhalten wir einen Zeiger darauf, keinen String. StrStrA sucht nach dem ersten Vorkommen einer Teilzeichenkette in der Zeichenkette (Groß- und Kleinschreibung wird beachtet, aber da unsere Zeichenketten gleich sind, ist das egal), und da unsere Zeichenketten gleich sind, wird ein Zeiger auf das erste Zeichen der Zeichenkette zurückgegeben, d. h. die Zeichenkette selbst.

Für diejenigen, die diesen Code verwenden werden, möchte ich das erklären. In der WinAPI gibt es kein String-Format. Stattdessen gibt es nur das lpsz-Format (ein Zeiger auf das erste Element eines Arrays von Zeichen, das mit 0x00 endet, auch bekannt als /0). Es ist ein Zeiger auf eine Speicheradresse. Da unsere Speicherzellen 32-Bit (d.h. 4 Byte) groß sind und int ebenfalls 4 Byte groß ist, passt alles gut hinein.

Fazit: Sie können Strings einfach in int-Arrays packen und damit Strukturen emulieren (und es gibt keine Strukturen und Klassen in MQL4), um sie weiter an die DLL zu übergeben, wenn eine Struktur oder Klasse benötigt wird. Selbstgeschriebene dll zur Datentypübersetzung (d.h. Konstruktionen wie "int(const char*)" (C-Typ-Übersetzung) oder ähnliche in C++) können jetzt nicht mehr verwendet werden.