Was ist daran falsch? - Seite 5

 
sss2019:


Wow, danke, ich glaube, diese Methode ist vielseitiger.

By the way, wie man in EA zu erklären, dass die Bestellung geöffnet wurde, OrderSend wie ich verstehe sendet nur die Bestellung Ticket. Vielleicht kann dies mit OrderSelect implementiert werden?


Vor dem Initialisierungsblock deklarieren wir eine Variable, die den Bestellschein enthält. Zum Beispiel:

int Ticket;

In der Funktion start (), vor dem Aufruf von OrderSend(), schreiben wir:

Ticket=-1;

Da die Funktion OrderSend() ein Ticket der Bestellung zurückgibt, prüfen wir, ob die Variable Ticket größer als Null ist, d.h. die Bestellung wurde aufgegeben. Andernfalls haben wir keinen Auftrag - siehe OrderSend-Referenz - dort steht geschrieben, dass die Funktion den Wert = (-1) zurückgibt, wenn der Auftrag nicht gesetzt werden kann, und nicht einen Tick. Da die Variable beim nächsten Tick zunächst mit dem Wert = -1 initialisiert wird und keine Reihenfolge festgelegt ist, bleibt die Variable bis zum Ende des Codes negativ. Und so geht es weiter, bis ein neuer Auftrag erteilt wird.

 
Könnten Sie mir bitte ein Beispiel zeigen, denn es fällt mir schwer.
 
sss2019:
Könnten Sie mir bitte ein Beispiel zeigen, denn es fällt mir schwer.
#property copyright ""
#property link      ""

int Ticket;
//+------------------------------------------------------------------+
//|                  Блок инициализации                              |
//+------------------------------------------------------------------+
int init(){
        return(0);
}
//+------------------------------------------------------------------+
//|                  Блок деинициализации                            |
//+------------------------------------------------------------------+
int deinit(){
        return(0);
}
//+------------------------------------------------------------------+
//|                  Старт работы советника                          |
//+------------------------------------------------------------------+
int start(){
        Ticket=(-1);
        
        if(если есть торговый сигнал){
                Ticket=OrderSend();
        }
        if(Ticket>0){// тикет более нуля - ордер встал
                // выполняем какие-то действия
        }
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+
 

Warum steht Ticket=(-1); in Klammern?

Was ist das für ein Unsinn, die Bestellung ist offen und das Ticket ist immer noch -1.

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int MaFastPeriod = 30;
extern int MaSlowPeriod = 90;
extern int StopLoss = 25;
extern int TakeProfit = 50;

int Ticket;
int init()
  {

  }



int deinit()
  {

  }

int start()
  {
  Ticket=(-1);
  double MyPoint = Point;
   if(Digits == 3 || Digits == 5)
      {
      MyPoint = Point * 10;
      }
      
double MaFast0 = iMA(Symbol(),0,MaFastPeriod,0,MODE_EMA,PRICE_CLOSE,0);
double MaSlow0 = iMA(Symbol(),0,MaSlowPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   
   if(OrdersTotal() == 0 && MaFast0 > MaSlow0 && Ticket==(-1))
      {
      Ticket=OrderSend(Symbol(),0,0.1,Ask,30,Ask-StopLoss*MyPoint,Ask+TakeProfit*MyPoint,"CommentA",0,0,Green);
      return(Ticket);
      }
  Alert("Ticket = ",Ticket); 
   return(0);
  }
 
Warum schreiben Sie So geht das Programm nicht weiter, und Sie erhalten keine Benachrichtigung
return(Ticket);?
 
Es stellt sich heraus, dass das Warnfenster nur dann erscheint, wenn es überhaupt kein Signal zur Eröffnung einer Position gab, und zwangsläufig -1 anzeigt
 
Sobald ein Auftrag seine Nummer der Ticket-Variablen zugewiesen hat, muss diese nicht mehr mit Return ausgegeben werden, da die Variable beim nächsten Tick nicht mehr gelöscht wird?
 

Ist es möglich, mehrere Aufträge gleichzeitig zu eröffnen? Zum Beispiel wie folgt

if(условие выполнено)
{
OrderSend()
OrderSend()
OrderSend()
}
 
sss2019:

Ist es möglich, mehrere Aufträge gleichzeitig zu eröffnen? Zum Beispiel wie folgt

Es kann sein, dass es so nicht funktioniert, weil die erste Anfrage vom Server bearbeitet wird und die nächsten einen Fehler erhalten. Es wäre besser, eigene Aufträge mit Fehlerbehandlung zu verwenden.
 
sss2019:

Ist es möglich, mehrere Aufträge gleichzeitig zu eröffnen? Zum Beispiel so?


Man kann nicht alles auf einmal machen.

Nur fortlaufend.