expert advisor - verschiedene Fragen - Seite 34

 
Marco vd Heijden:

Nein, um zu überprüfen, ob es sich um ein Demokonto oder ein Live-Konto handelt, wird der Wettbewerb selten verwendet.
Lot max kann sehr einfach sein.

Danke für die prompte Antwort.

Ich muss nur Losgröße max nur Demo-Konto anwenden.
(aber natürlich tatsächlich Live-Konto - das ist nur für den Test - ich will versuchen, wenn Demo-Konto, wenn Losgröße besser dann Losgröße max wird nicht öffnen Verkauf und Kauf-Aufträge - aber wenn Live-Konto oder Wettbewerb-Konto - so dass diese Losgröße max wird nicht gelten beide (live oder Wettbewerb) )

Könnte ich Switch Operator verwenden?

Vielen Dank.
( Ich werde es später versuchen. )

 
Ja, Sie können Switch Operator verwenden.
 
Marco vd Heijden:
//---
// calculate lotsize here
//---

// check if lotsize is not too high

if(lotsize>lotsize_max)
{
  lotsize=losize_max;
}

Ich möchte fragen - Sie wollen sagen - wenn " lotsize > lotsize_max " sollte die Losgröße für das Demokonto" lotsize = lotsize_max " sein? Verstehe ich Sie richtig, bitte?

Danke vielmals.
( Ich arbeite daran )

 
Max Enrik:

Ich möchte fragen - Sie wollen sagen - wenn " lotsize > lotsize_max " sollte die Losgröße für das Demokonto" lotsize = lotsize_max " sein? Verstehe ich Sie richtig, bitte?

Vielen Dank!
( Ich arbeite daran )

Versuchen Sie
if(IsDemo() && lotsize>lotsize_max) lotsize=lotsize_max;
 
honest_knave:
Versuchen Sie
if(IsDemo() && lotsize>lotsize_max) lotsize=lotsize_max;

Sehr schön! Vielen Dank dafür.

----
Funktion mich fragen sollte - Ja oder Nein- ich denke, das könnte besser sein für jetzt. ( Ich brauche nur Erfahrung für diese Funktion, wie es für mich auf Demo (natürlich live) Konto funktioniert - ich werde diese Funktion am Montag testen - wenn ich diesen Teil des Codes fertigstellen kann )
( jetzt weiß ich nicht genug über diese Funktion - ich hoffe, ich kann bis morgen tun )

Jeder gute Kommentar wäre eine große Hilfe für mich.
Vielen Dank im Voraus.

 

Ja, natürlich geht es auch ohne den Lotsmax und wenn Sie dann später Ihre Strategie verfeinern wollen oder das Risiko begrenzen wollen, können Sie ihn verwenden, so dass er im Moment keine Notwendigkeit ist.

Sie können es einfach eliminieren, ich wollte Ihnen nur einige Zeilen meines Sicherheitsmechanismus zeigen.


Wenn Sie eine Bestätigung wünschen, können Sie eine

MessageBox()

https://docs.mql4.com/common/messagebox


int result=MessageBox(" This is a Messagbox, Do you want to proceed?","Warning",MB_YESNO);

if(result==IDYES)
{
  // Yes Pressed
   Print("OK");
}

if(result==IDNO)
{
  // No Pressed
}

Hier sind die wichtigsten Flags, die Sie in der Messagebox-Funktion nach der Nachricht setzen:

Konstante

Wert

Beschreibung

MB_OK

0x00000000

Nachrichtenfenster enthält nur eine Schaltfläche: OK. Voreinstellung

MB_OKCANCEL

0x00000001

Das Meldungsfenster enthält zwei Schaltflächen: OK und Abbrechen

MB_ABORTRETRYIGNORE

0x00000002

Das Meldungsfenster enthält drei Schaltflächen: Abbrechen, Wiederholen und Ignorieren

MB_YESNOCANCEL

0x00000003

Das Meldungsfenster enthält drei Schaltflächen: Ja, Nein und Abbrechen

MB_YESNO

0x00000004

Das Meldungsfenster enthält zwei Schaltflächen: Ja und Nein

MB_RETRYCANCEL

0x00000005

Das Meldungsfenster enthält zwei Schaltflächen: Wiederholen und Abbrechen

MB_CANCELTRYCONTINUE

0x00000006

Das Meldungsfenster enthält drei Schaltflächen: Abbrechen, Erneut versuchen, Fortsetzen


Und hier die Rückgabewerte:

Konstante

Wert

Beschreibung

IDOK

1

Schaltfläche "OK" wurde gedrückt

IDCANCEL

2

Die Taste "Abbrechen" wurde gedrückt

IDABBRUCH

3

Die Taste "Abbruch" wurde gedrückt

IDRETRY

4

Die Taste "Wiederholung" wurde gedrückt

IDIGNORE

5

Die Schaltfläche "Ignorieren" wurde gedrückt

IDYES

6

Die Schaltfläche "Ja" wurde gedrückt

IDNO

7

Die Taste "Nein" wurde gedrückt

IDTRYAGAIN

10

Schaltfläche "Nochmal versuchen" wurde gedrückt

IDCONTINUE

11

Schaltfläche "Weiter" wurde gedrückt


Messagebox() funktioniert nicht in der Testversion.

MessageBox - Common Functions - MQL4 Reference
MessageBox - Common Functions - MQL4 Reference
  • docs.mql4.com
MessageBox - Common Functions - MQL4 Reference
 
Marco vd Heijden:

Ja natürlich geht es auch ohne den Lotsmax und wenn man dann später seine Strategie verfeinern will oder das Risiko begrenzen will, kann man es verwenden, es ist also im Moment keine Notwendigkeit.
Sie können es einfach eliminieren, ich wollte Ihnen nur einige Zeilen meines Sicherheitsmechanismus zeigen.

Vielen Dank für Ihre großartige Hilfe.

Also, ich habe gerade versucht, wie unten Methode, bin ich richtig machen, bitte?
(Ich musste fragen, bevor ich sie in meine Haupt-.mq4-Datei einfüge - ich arbeite daran)

Vielen Dank im Voraus.

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }

  if(result_message==IDNO)
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}
 

Nur ein Stil-Tipp, der Ihren Code (sehr, sehr geringfügig) effizienter machen wird... aber hey, es summiert sich alles!

Sie haben ein Nachrichtenfeld mit 2 Schaltflächen. Wenn es nicht IDYES ist, muss es IDNO sein (oder die Funktion wurde nicht erfolgreich abgeschlossen).

Es ist also nicht nötig, result_message zweimal zu testen.

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }
   else
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}

Wenn Sie es lieber schriftlich sehen möchten, verwenden Sie eine 'else if'-Anweisung:

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }

  else if(result_message==IDNO)
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}
 
honest_knave:

Nur ein Stil-Tipp, der Ihren Code (sehr, sehr geringfügig) effizienter machen wird... aber hey, es summiert sich alles!
Sie haben ein Nachrichtenfeld mit 2 Schaltflächen. Wenn es nicht IDYES ist, muss es IDNO sein (oder die Funktion wurde nicht erfolgreich abgeschlossen).
Es ist also nicht nötig, result_message zweimal zu testen.

Nochmals vielen Dank für alles.
Jetzt kann ich sie in Haupt-EA's einbauen.
( auch ich brauche Erfahrung für MessageBox() )

 
Max Enrik:

Nochmals vielen Dank für alles.
Jetzt kann ich sie in Haupt-EA's einbauen.
( auch ich brauche Erfahrung für MessageBox() )

Es war nichts falsch daran, es anders zu schreiben, es ist nur eine persönliche Vorliebe. Schön, dass Sie es hinbekommen haben.