¿Qué hay de malo en eso? - página 5

 
sss2019:


Wow gracias, creo que este método es más versátil.

Por cierto, cómo declarar en el EA que la orden ha sido abierta, OrderSend según tengo entendido sólo envía el ticket de la orden. ¿Tal vez, esto puede ser implementado usando OrderSelect?


Antes del bloque de inicialización, vamos a declarar una variable que llevará el ticket de pedido. Por ejemplo:

int Ticket;

En la función start (), antes de llamar a OrderSend(), escribimos:

Ticket=-1;

Como la función OrderSend() devuelve un ticket del pedido, entonces comprobamos si la variable Ticket es mayor que cero, entonces el pedido ha sido realizado. De lo contrario, no tenemos orden - ver la referencia OrderSend - está escrito allí que si la orden no se puede establecer, la función devolverá el valor = (-1), no un tick. En el siguiente tick, como la variable se inicializa primero con valor = -1 y no se establece ninguna orden, la variable seguirá siendo negativa hasta el final del código. Y esto continúa hasta que se realiza un nuevo pedido.

 
Podrías mostrarme un ejemplo, porque me cuesta mucho.
 
sss2019:
Podrías mostrarme un ejemplo, porque me cuesta mucho.
#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);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+
 

¿Por qué está entre paréntesis Ticket=(-1);?

Que tontería es esta, el pedido está abierto y el ticket sigue siendo -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);
  }
 
Por qué escribes Para que el programa no vaya más allá, y no recibas una alerta
return(Ticket);?
 
Resulta que la ventana de alerta sólo aparecerá si no hubo ninguna señal para abrir una posición, y necesariamente mostrará -1
 
Entonces, una vez que una orden ha asignado su número a la variable Ticket, no es necesario emitirla con return, la variable no se borrará más en el siguiente tick?
 

¿Es posible abrir varias órdenes al mismo tiempo? Por ejemplo, así

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

¿Es posible abrir varias órdenes al mismo tiempo? Por ejemplo, así

Puede que no funcione así, porque la primera petición será atendida por el servidor y las siguientes obtendrán un error. Sería mejor utilizar sus propias órdenes con manejo de errores.
 
sss2019:

¿Es posible abrir varias órdenes al mismo tiempo? ¿Por ejemplo, así?


No se puede hacer todo a la vez.

Sólo consecutivamente.