Errores, fallos, preguntas - página 803

 
Karlson:
Diferentes servidores, diferentes 500 pp.
¿Qué tiene que ver esto con los diferentes servidores? Son dos pruebas realizadas por la misma persona. Sólo difiere el par de divisas especificado en el probador
 
ilunga:
¿Qué tiene que ver esto con los diferentes servidores? Son dos pruebas realizadas por la misma persona. Sólo difiere el par de divisas especificado en el probador
Actualiza tu terminal/probador y quizás todo funcione, yo tengo la build 687 y todo funciona.
 
fyords:

Tengo todo correcto, servidor de MK demo.

Entonces, por favor, explique, cuál es el valor entre paréntesis al abrir una orden y por qué en un caso es (1,29565 / 1,29654) y en el otro (1,29443 / 1,29479 / 1,29443)

(Me refiero a los resultados de sus pruebas.

fyords:
Actualiza tu terminal/probador y puede que todo funcione, yo tengo una build 687 y todo funciona.

Aparece exactamente el mismo error al enviar el EA al campeonato (en sus pruebas automáticas), por lo que la actualización sólo ayudará parcialmente


Es más. Sólo aparece 1 vez (el primer intento de colocar una orden en un par de divisas que no sea "su")

 
ilunga:
¿Qué tiene que ver esto con los diferentes servidores? Son dos pruebas realizadas por la misma persona. Sólo difiere el par de divisas especificado en el probador.

Echa un vistazo a los artículos sobre el probador:

Los precios no tienen por qué ser los mismos cuando se prueban en otro par de divisas

 
Rosh:

Echa un vistazo a los artículos sobre el probador:

Los precios no tienen que coincidir cuando se prueban en otro par de divisas

Así que, hice algunas pruebas más. Realmente un problema con el "precio actual".

Código:

#include <Trade\SymbolInfo.mqh>
#include <Trade\Trade.mqh>

CSymbolInfo       m_sym;
CTrade            m_trade;

double bar_info[2];
bool a;

int OnInit()
{
   SymbolSelect("EURUSD", true);
   SymbolSelect("GBPUSD", true);
   m_sym.Name("EURUSD");
   a = false;
   return(0);
}

void OnTick()
{
   if (a) return;
   a = true;
   m_sym.Refresh();
   m_sym.RefreshRates();
   CopyHigh("EURUSD", PERIOD_D1, 0, 2, bar_info);
   Print("Текущая цена Ask:" + DoubleToString(m_sym.Ask()));
   Print("Текущая цена Bid:" + DoubleToString(m_sym.Bid()));
   Print("Цена открытия:" + DoubleToString(bar_info[1] + 5000*_Point));
   BUY_pending("EURUSD");
   Print("Текущая цена Ask:" + DoubleToString(m_sym.Ask()));
   Print("Текущая цена Bid:" + DoubleToString(m_sym.Bid()));
}

uint BUY_pending(string symbol)
{
   CopyHigh(symbol, PERIOD_D1, 0, 2, bar_info);
   // готовим запрос
   MqlTradeRequest request = {0};
   ZeroMemory(request);
   request.action = TRADE_ACTION_PENDING;
   request.magic  = 0;
   request.symbol = symbol;
   request.volume = 1;
   request.price  = m_sym.Ask() + 1;
   request.sl     = 0;
   request.tp     = 0;
   request.deviation = 10;
   request.type   = ORDER_TYPE_BUY_STOP; 
   request.type_filling = ORDER_FILLING_FOK;
   MqlTradeResult result;
   OrderSend(request,result);
   Print(IntegerToString(result.retcode));
   return (result.retcode);
}

Tenga en cuenta que abro al precio del símbolo Ask más 1 (con un gran margen). Al mismo tiempo, antes y después, imprimo la oferta y la demanda actuales.


Resultados (al probar en GBPUSD):

GR      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Текущая цена Ask:1.29241000
LH      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Текущая цена Bid:1.29220000
QL      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Цена открытия:1.34220000
GD      0       Trade   11:49:40        2012.01.02 09:00:00   buy stop 1.00 EURUSD at 2.29241 (1.29709 / 1.29722)
IG      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   10009
CP      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Текущая цена Ask:1.29241000
HG      0       test (GBPUSD,H1)        11:49:40        2012.01.02 09:00:00   Текущая цена Bid:1.29220000

El precio de 1,29241 se imprime antes y después de la orden. Mientras tanto, entre paréntesis (cuando se coloca la orden), el precio es de 1,29722. ¿CÓMO? ¿O estoy obteniendo el precio actual de forma incorrecta?


Y en segundo lugar, si hubo un error con el precio, entonces ¿por qué el error 10016 (paradas)?

 
ilunga:

Pero el error sigue existiendo en la escena de corte.

Para ser sincero, no entiendo muy bien cómo puede ser el error 10016 en caso de que no haya paradas

No sé qué y cómo lo estás haciendo, el problema probablemente esté en SL.

Mi versión funciona sin problemas. La llamada, sin embargo, lanzó en el bloque de inicialización, no molestarse con los controles (aunque la presencia de la orden antes de establecer que valdría la pena comprobar).

bool BUY_pending(string symbol,ENUM_TIMEFRAMES period,double volume,ulong magic = 0)
{
//----------------------------------------------------------------------------//
//Work variables
double price = 0, sl = 0, tp = 0; //Prices: Open, Sell stop, Take profit
int ResCopy = -1; //Result of copying the data into an array
int Dig     = 0;  //Digits

bool Result = true; //Returned importance
//----------------------------------------------------------------------------//

ResetLastError();

//Checking the signal to stopping the trading system
  if(IsStopped()) return(false);
//Preparation of structures
ZeroMemory(TradeRequest);
ZeroMemory(TradeResult);
ZeroMemory(CheckResult);
//Copying the data into an array
ResCopy = CopyHigh(symbol,period,0,2,bar_info);

  if(ResCopy==-1)return(false); 
//Calculations
Dig   = (int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);

price = NormalizeDouble(bar_info[1] + 500*_Point,Dig);
sl    = NormalizeDouble(price - 200*_Point,Dig);
tp    = NormalizeDouble(price + 1000*_Point,Dig);
//Preparation of request
TradeRequest.type_filling = ORDER_FILLING_FOK;
TradeRequest.action       = TRADE_ACTION_PENDING;
TradeRequest.type         = ORDER_TYPE_BUY_STOP; 
TradeRequest.deviation    = 10;
TradeRequest.symbol = symbol;
TradeRequest.magic  = magic;
TradeRequest.volume = volume;
TradeRequest.price  = price;
TradeRequest.sl     = sl;
TradeRequest.tp     = tp;
//Checking
Result = OrderCheck(TradeRequest,CheckResult);
  if((!Result)||(CheckResult.retcode!=0))return(false);
//OrderSend
Result = OrderSend(TradeRequest,TradeResult);
//Checking for presence of the errors
  if(_LastError!=0){Result = false;}
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}
Archivos adjuntos:
 
Interesting:

No sé qué o cómo lo estás haciendo, el problema probablemente sea realmente de SL.

Mi versión funciona sin problemas. La llamada es verdadera, pero tiré la llamada al bloque de inicialización, para no molestar con las comprobaciones (aunque la presencia de la orden antes de establecerla valdría la pena comprobarla).

Una pequeña petición. ¿Puede corregir el código para que se muestre el precio actual del símbolo antes del OrderSend?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
ilunga:
Una pequeña petición. ¿Puedes retocar el código para que antes del OrderSend salga el precio actual del instrumento en el que abrimos?

Inténtalo de esta manera:

   MqlTradeResult result;
   if(!OrderSend(request,result))
     {
      PrintFormat("retcode=%d price=%G  Ask=%G  Bid=%G Comment=%s",
                  result.retcode,result.price,result.ask,result.bid,result.comment);
      //---
      PrintFormat("%s %s at %G Ask=%G  Bid=%G  ",
                  EnumToString(request.type),symbol,request.price,SymbolInfoDouble(symbol,SYMBOL_ASK),
                  SymbolInfoDouble(symbol,SYMBOL_BID));
      Print("------------");
     }
 
ilunga:
Pequeña petición. ¿Puede corregir el código, para que salga el precio actual en esa herramienta antes de OrderSend?

¿Un spritzer de precio? No veo la necesidad de eso, puedes añadir un mensaje sobre el éxito/fracaso de la comprobación y la configuración de la orden.

En principio puedes hacerlo tú mismo, no debería ser difícil (por la idea).

Rosh:

Inténtalo de esta manera:

Para la depuración servirá bastante bien, en el código de trabajo será superfluo (al menos es una solución un poco chorra)

Y es mejor hacer el pedido después de OrderCheck, para que en caso de error no vaya a OrderSend.

PS

Se me olvidó añadir, basándome en el ejemplo bar_info podría colocarse en una función sin problemas.

 
Interesting:

¿Un spritzer de precio? No veo la necesidad de eso, puedes añadir un mensaje sobre el éxito/fracaso de la comprobación y la configuración de la orden.

En principio, puedes hacerlo tú mismo, no debería ser difícil (en idea).

Puede ser lo suficientemente bueno para la depuración, pero en el código de producción será superfluo (al menos es una solución un poco torcida).

Y sería mejor hacer el pedido después de OrderCheck, para que en caso de error no lleguemos a OrderSend.

PS

Se me olvidó añadir, basándome en el ejemplo bar_info también podría colocarse en una función sin problemas.

Es divertido. En su ejemplo, he eliminado el BUYSTOP para la GBP, sólo queda el EURUSD.

Después de rellenar los campos de la solicitud, he sacado el precio de la orden pendiente.

1) Tiene variante - orden pendiente se coloca en el Inite

2012.01.01 00:00:00 precio = 1.30487000

2) Comenté el init, lo moví a OnTick. He puesto una condición para que se active sólo en el primer tick.

2012.01.02 09:00:00 precio = 1.29720000


P.D. ¿Entiendo correctamente que en mi código (y en el tuyo) bar_info[1] es el máximo de la barra actual?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5