expert advisor - verschiedene Fragen - Seite 11

 
Max Enrik:

Unten Code funktioniert perfekt, nachdem Sie mir geholfen, danke Mann.

Und ich umbenannt, wie Sie sagten, es funktioniert gut, aber nur ich frage mich, bin ich etwas falsch machen?
(ich bin nur besorgt)

Sich Sorgen zu machen, ob der eigene Code funktioniert, ist ganz normal (ja, es ist gesund). Häufig sehen wir Code, der kompiliert, aber nicht das tut, was wir wollen (wegen menschlicher Fehler und/oder mangelnder Kenntnisse).

Am besten machen Sie es sich zur Gewohnheit, Variablen auszudrucken und Rückgabewerte zu überprüfen. Sobald Sie das getestet haben, können Sie die Druckanweisungen entfernen.

In Ihrem obigen Codeausschnitt könnten Sie ein einfaches Print("SL-Wert: "+sl) hinzufügen und dann in Ihrem Expert-Protokoll nachsehen, ob die Werte den Erwartungen entsprechen.

 
Max Enrik: Ich frage mich nur, ob ich etwas falsch mache?
    { sl = Bid + points_to_change( stoploss * 10 ); }
Warum multiplizieren Sie mit 10? Wenn der Stoploss in Pips angegeben ist, wandeln Sie ihn über pips_to_change um, damit er bei 4-stelligen Brokern funktioniert.
 
Marco vd Heijden:
Es ist einfach, wenn es funktioniert, wie Sie nicht etwas falsch machen, sonst funktioniert es einfach nicht.

#Checkmark - Geschlossen

Yeah! Ich akzeptiere, dass dieses Bitmap-Etikett schon eine lange Zeit von mir gebraucht hat. Endlich habe ich, was ich wollte...
Natürlich, großer Mann, danke für deine Hilfe.

Ich löse mein Problem mit folgendem Code.

void ordersell()
{
    //  Sell set Stop Loss with bitmap label
    
    // when bitmap label shows - ON
    if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == true )
    {
        sl = Bid + points_to_change( stoploss * 10 );
        Print( " | TRUE :  Active | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
    }

    // when bitmap label shows - OFF
    if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == false )
    {
        sl = 0;
        Print( " | FALSE :  Inactive | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
    }

    // call your stop loss 'sl'
    ticket = OrderSend( ..., sl, ... );
    // sounds
    if ( ticket > 0 )
    { PlaySound( "ok.wav"      ); } else
    { PlaySound( "timeout.wav" ); }
    return;
}
 
honest_knave:

Am besten gewöhnen Sie sich an, Variablen auszudrucken und Rückgabecodes zu überprüfen. Sobald Sie dies getestet haben, können Sie die Druckanweisungen entfernen.
Mit Ihrem obigen Codeschnipsel könnten Sie ein einfaches Print("SL-Wert: "+sl) hinzufügen und dann in Ihrem Expertenprotokoll nachsehen, ob die Werte den Erwartungen entsprechen.

Ich benutze es bereits, aber manchmal zweifle ich an meinem Code, denn wenn Sie mein#Checkmark-Problem überprüfen, hoffe ich, dass Sie mich besser verstehen werden.
Jedenfalls
vielen Dank für Ihre Zeit.

 
whroeder1:
Warum multiplizieren Sie mit 10? Wenn Stoploss in Pips ist, konvertieren Sie es über pips_to_change, so dass es auf 4-stellige Makler funktioniert.

Oh! Ja, Mann, gute Frage, habe ich schon geändert. Danke für deine Aufmerksamkeit.

 

#Stop Loss /Take Profit- Geschlossen

Vielen Dank für deine klareren Kommentare Marco.
Alles Gute für dich.

Besonderen Dank an @Marco vd Heijden

 

#Strg + Maustaste - Öffnen

Ich habe einige Stunden damit verbracht, eine gute Dokumentation darüber zu finden, und ich kann keine guten Informationen und Dokumentationen dazu finden.
Ich brauche nur, wenn ich'Linke Maus + Strg' für Lot Größe um 0,1 erhöhen klicken. (Normalerweise wird um 0,01 erhöht).

Ich möchte Dokumentation und Artikel mit Beispielen darüber finden.

Vielen Dank im Voraus.

 
Max Enrik:

#Strg + Maustaste - Öffnen

Ich habe ein paar Stunden damit verbracht, eine gute Dokumentation darüber zu finden, und ich kann keine guten Informationen und Dokumentationen dazu finden.
Ich brauche nur, wenn ich'Linke Maus + Strg' für Lot Größe um 0,1 erhöhen klicken. (Normalerweise wird um 0,01 erhöht).

Ich möchte Dokumentation und Artikel mit Beispielen dazu finden.

Vielen Dank im Voraus.

Ich kenne keine einfache Möglichkeit, Tastenkombinationen abzufangen. Es wäre besser, eine zweite Taste zu haben, die man anklicken muss, wenn man um 0,1 statt um 0,01 erhöhen will.

Dennoch können Sie Folgendes versuchen:

Prüfen Sie, ob das letzte Ereignis eine Tastenkombination CTRL war.

Wenn ja, prüfen Sie, ob dieses Ereignis ein Mausklick ist.

Allerdings gibt es bei diesem Ansatz einige Probleme:

1. Wenn zwischen dem Tastendruck und dem Mausklick ein anderes Diagrammereignis eintritt, schlägt es fehl.

2. Durch die Verzögerung zwischen dem Mausklick und dem Loslassen der STRG-Taste kommt es zu einem Überlauf. Die Umgehungslösungen für dieses Problem bringen ihre eigenen Probleme mit sich.

Vielleicht haben andere Leute bessere Ideen.

#define CTRL 17

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   static bool wasCTRL=false;
   if(wasCTRL && id==CHARTEVENT_CLICK) Print("CTRL+CLICK detected");
   wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==CTRL);
  }
 
//+------------------------------------------------------------------+
//|                                                      keydown.mq4 |
//|      Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

   if(id==CHARTEVENT_CLICK)
     {
      //Print("CLICK");
      ctrl_click=1;
     }

   if(id==CHARTEVENT_KEYDOWN)
     {
      //Print(lparam);// print to identify keycode

      if(lparam==17)  // ctrl key
        {
         if(ctrl_click==1)// if mouse click
           {
            //Do Something when CTRL (keycode 17) is pressed
            Print("CTRL+CLICK");
            ctrl_click=0;  // reset
           }
        }
       ctrl_click=0; // reset if not ctrl
     }
  }
//+------------------------------------------------------------------+
 

Ich denke schon.

Es ist aber etwas anders.