Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 537

 
VoDyaMon:

Wenn Sie ein einfaches Skript schreiben, das ein Objekt vom Typ OBJ_ARROW_RIGHT_PRICE anlegt und es dann löscht, wird das Objekt nicht gelöscht. Außerdem stellt sich beim Befehl ObjectType plötzlich heraus, dass das erstellte Objekt nicht vom Typ OBJ_ARROW_RIGHT_PRICE (==36) ist, sondern ==22, d.h. ein einfacher "Pfeil nach oben" !!! Bin ich der Einzige, der das hat, oder haben das alle?

Es gab bereits Meinungen von "Experten" zu diesem Thema: wie die Hilfe zu lesen, oder nicht genug Speicher :) .

Speicher ist genug.

Es scheint, dass der Befehl ObjectCreate ein Objekt des Typs OBJ_ARROW_RIGHT_PRICE zeichnet , das nicht mit dem Befehl ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE) entfernt werden kann, wohl aber mit dem Befehl ObjectsDeleteAll(0,22), als hätten wir nicht das richtige Preisschild, sondern einen "Pfeil nach oben". Wessen Schuld ist das?

... ... ...

Um ein Objekt des Typs OBJ_ARROW_RIGHT_PRICE zu löschen, verwenden Sie den Befehl ObjectsDeleteAll(0,OBJ_ARROW), mit obligatorischer Angabe des Unterfensters.

p.s. Ein Objekt vom Typ OBJ_ARROW ist ein beliebiger "Pfeil", nicht nur ein "Pfeil nach oben". ObjectCreate(...OBJ_ARROW...) erzeugt sofort einen "Pfeil nach oben". Was soll die Aufregung darüber, dass es nicht in der Hilfe steht?

Schreiben Sie in diesen Thread. Wenigstens sind die Entwickler da.
 

Es gibt ein Drehbuch:

#property show_confirm;
int slip=5;

void start()
{
  for(int i=OrdersTotal()-1;i<=0;i--)
  {
   int p=0; double price=0;
      if(OrderSelect(i,SELECT_BY_POS))
     {
       switch(OrderType())
        {
         case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
         case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
         default: break;
        }
         while(p<5)                              
           {                                    
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==true) 
               break;                   
            else                              
              {
               p++;                              
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(1000);                       
              }
           }
     }
 }
}

Dabei wird nicht einmal versucht, eine einzige offene Marktorder zu schließen. Warum?

Es werden keine Fehler in das Protokoll geschrieben:

2014.03.10 04:39:11.093 Script closeallmarket AUDUSD,M30: entfernt<br / translate="no"> 2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30: uninit Grund 0
2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30: initialisiert
2014.03.10 04:39:10.109 Script closeallmarket AUDUSD,M30: erfolgreich geladen
 

Ersetzen Sie

 for(int i=OrdersTotal()-1;i<=0;i--)

zu

 for(int i=OrdersTotal()-1;i>=0;i--)
 

Hallo Herr Fachmann, weigern Sie sich nicht, einen Neuling in der Programmierung, schauen Sie sich den Code, um zu sehen, ob es richtig geschrieben ist. Wer nicht zu faul ist, sich damit zu befassen. Ich kann sie nicht mit dem Strategy Tester testen, weil sie mehrere Währungen enthält. DieDatei mit dem Code und den Indikatoren ist dem Archiv beigefügt.



Dateien:
 

Nachmittags.

Ich kann keinen analogen Code von php zu mql4 erstellen:

$massiv = array(
            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877            
            );
                        
            asort($massiv);
            $i=0;
            foreach ($massiv as $key => $val){$i++;$massiv[$key]=$i;}
            
            $a="";
            ksort($massiv);
            foreach ($massiv as $key => $val){$a=$a.$val.".";}  

Das heißt, aus einem Array.

            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877 

Sie benötigen ein Array

            "1" => 1,
            "2" => 3,
            "3" => 2,
            "4" => 4,
            "5" => 7,
            "6" => 5,
            "7" => 6,
            "8" => 8 

Sie brauchen Hilfe.

 
Roger:

Ersetzen Sie

zu


Ohhhh... Mann, das ist ein anderes Mal, danke ))))
 

Ich versuche, einen einfachen EA zu schreiben, der alle Positionen auf meinem Konto schließt, wenn er angegebene Gewinn- oder Verlustwerte in der Einzahlungswährung erreicht (ich öffne durch mehrere Symbole), aber es schließt Positionen, sobald sie erscheinen (((

Ich verstehe nicht, was los ist:

input double tp_c = 80.0;
input double sl_c = 120.0;

input int slip=5;

 double profit_c = 0.0;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }
 
denis77515:

Hallo Herr Fachmann, weigern Sie sich nicht, einen Neuling in der Programmierung, schauen Sie sich den Code, um zu sehen, ob es richtig geschrieben ist. Wer nicht zu faul ist, sich damit zu beschäftigen. Ich kann sie nicht mit dem Strategy Tester testen, weil sie mehrere Währungen enthält. Ich habe eine Datei mit dem Code und den Indikatoren an das Archiv angehängt.



Ich bin sehr daran interessiert, wie ein Anfänger so entschlossen ist, mit einem solchen Expert Advisor zu handeln und ein Handelssystem zu schreiben, dass es sich lohnt. Ich habe kein Mitleid mit der Kaution?


Der Code zeigt eine Menge Fehler, ohne auf den Handelsalgorithmus einzugehen, kein Versuch, ihn zu optimieren.

Bitte finden Sie den Unterschied zwischen Ihren Funktionen CountBuy_JPY() CountSell_JPY() CountBuy_GBP() In der Ausgabe jeder dieser Funktionen erhalten Sie das gleiche Ergebnis, bei Buy alle offenen Buy-Positionen, bei den anderen alle Sal-Positionen. Versuchen Sie, alle diese Funktionen in einer einzigen zu schreiben, und Sie erhalten zwei verknüpfte Arrays mit Symbolen und der Anzahl der Aufträge darin.

Sie sind von dem Tester so weit entfernt wie der Mond. Sie sollten Skripte für jede Funktion schreiben und schauen, was Sie erhalten, dann den Debugger starten und sich alle Variablen ansehen. Nur so kommen Sie schrittweise voran

 
evillive:

Ich versuche, einen einfachen EA zu schreiben, der alle Positionen auf meinem Konto schließt, wenn er angegebene Gewinn- oder Verlustwerte in der Einzahlungswährung erreicht (ich öffne durch mehrere Symbole), aber es schließt Positionen, sobald sie erscheinen (((

Ich verstehe nicht, was los ist:


Analysieren Sie den Zustand ... Und der Rat ist derselbe, verwenden Sie die Ausdruck-Skripte, und kommentieren Sie die Handelsoperationen für jetzt und Debug
if(profit_c > tp_c || profit_c < sl_c) closeall();   profit_c > 80 ИЛИ  profit_c < 120   
 
evillive:

Ich versuche, einen einfachen EA zu schreiben, der alle Positionen auf meinem Konto schließt, wenn er angegebene Gewinn- oder Verlustwerte in der Einzahlungswährung erreicht (ich öffne durch mehrere Symbole), aber es schließt Positionen, sobald sie erscheinen (((

Ich verstehe nicht, was los ist:



input double tp_c = 80.0;
input double sl_c = - 120.0; //// minus 120

input int slip=5;

 double profit_c ;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   profit_c = 0.0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }