Cosa c'è di sbagliato in questo? - pagina 5

 
sss2019:


Wow grazie, penso che questo metodo sia più versatile.

A proposito, come dichiarare in EA che l'ordine è stato aperto, OrderSend come ho capito invia solo il biglietto dell'ordine. Forse, questo può essere implementato usando OrderSelect?


Prima del blocco di inizializzazione, dichiariamo una variabile che porterà il biglietto d'ordine. Per esempio:

int Ticket;

Nella funzione start (), prima di chiamare OrderSend(), scriviamo:

Biglietto=-1;

Poiché la funzione OrderSend() restituisce un biglietto dell'ordine, allora controlliamo se la variabile Ticket è maggiore di zero, allora l'ordine è stato effettuato. Altrimenti, non abbiamo nessun ordine - vedi aiuto di OrderSend() - è scritto lì che se l'ordine non è stato impostato, la funzione restituirà il valore = (-1), non il tick. Al prossimo tick, poiché la variabile è inizializzata prima con valore = -1 e nessun ordine è impostato, la variabile rimarrà negativa fino alla fine del codice. E questo continua fino a quando non viene fatto un nuovo ordine.

 
Potresti per favore mostrarmi un esempio, perché sto avendo difficoltà.
 
sss2019:
Potresti per favore mostrarmi un esempio, perché sto avendo difficoltà.
#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);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+
 

Perché Ticket=(-1); è tra parentesi?

Che razza di assurdità è questa, l'ordine è aperto e il biglietto è ancora -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);
  }
 
Perché scrivi Così il programma non va oltre, e non ricevi un avviso
return(Ticket);?
 
Si scopre che la finestra di avviso si apre solo se non c'è stato alcun segnale per aprire una posizione, e visualizza necessariamente -1
 
Quindi una volta che un ordine ha assegnato il suo numero alla variabile Ticket, non c'è bisogno di emetterlo con il ritorno, la variabile non sarà cancellata ulteriormente al prossimo tick?
 

È possibile aprire diversi ordini allo stesso tempo? Per esempio così

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

È possibile aprire diversi ordini allo stesso tempo? Per esempio così

Potrebbe non funzionare così, perché la prima richiesta sarà gestita dal server e le successive riceveranno un errore. Sarebbe meglio usare i propri ordini con la gestione degli errori.
 
sss2019:

È possibile aprire diversi ordini allo stesso tempo? Per esempio così?


Non si può fare tutto in una volta.

Solo consecutivamente.

Motivazione: