Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1316

 
Igor Makanu:

He escrito más arriba, sobre el nivel de las preguntas ;)

y se empezó a buscar la optimización de la inicialización en OnTick/OnInit - todo es más sencillo allí, se necesita protección para el código encontrado para compartirlo con los mismos amigos ))))

Ya veo, entonces un brindis: ¡por los "amigos" encontrados!

 
Igor Makanu:

Necesita protección para el código encontrado para compartir con amigos similares )))

Muy bien dicho. Probablemente parezcamos empollones, ¡pero nos estamos divirtiendo!

 
Vitaly Muzichenko:

Bueno, ese es el límite de todo :(


Vitaly, ¿a qué viene esa negatividad? El hombre solo pide que lo trolleen, hay que respetar)

Igor Makanu:

He escrito más arriba, sobre el nivel de las preguntas ;)

y empezaste a buscar la optimización de la inicialización en OnTick/OnInit - todo es más simple allí, necesitas protección para el código encontrado, para compartir con los mismos amigos )))

))))

 
Aleksey Mavrin:

Vitaly, ¿a qué viene esa negatividad? El hombre sólo pide que lo trolleen, deberías respetarlo)

))))

Muy bien, un poco de positividad.

 
Hola, ¿podría aconsejarme por favor? Elmanual indica que el evento Init es procesado por la función OnInit(). Este evento también se genera después de un cambio de instrumento financieroy/o de período del gráfico.

Aquí tengo un código sencillo. Cuando cambio el marco temporal, la función funciona, pero no cuando cambio el instrumento. ¿O tal vez he entendido mal el término "cambio de instrumento financiero"?

int OnInit()
  {
    Print("HALLO");
    return(INIT_SUCCEEDED);
  }
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
WinProject:
Buen tiempo, por favor avisa. El manual dice que el evento Init es manejado por la función OnInit(). Este evento también se genera después de un cambio de instrumento financieroy/o de período del gráfico.

Aquí tengo un código sencillo. Cuando cambio el marco temporal, la función funciona, pero no cuando cambio el instrumento. ¿O tal vez he entendido mal el término "cambio de instrumento financiero"?

int OnInit()
  {
    Print("HALLO Period()= ",Period(),"Symbol()=",Symbol());
    return(INIT_SUCCEEDED);
  }

Para que la percepción sea correcta, es mejor así. Si pones un nuevo símbolo en el gráfico, OnDynit debería funcionar y empezar con OnInit

 
Valeriy Yastremskiy:

Por fidelidad, es mejor así. Si pones un nuevo símbolo en el gráfico, OnDeinit debería funcionar y empezar con OnInit

Gracias, tantos años con el terminal y no sabía que se podía lanzar a un gráfico desde una visión general del mercado, pensaba que cambiar un instrumento financiero era cambiar a una ventana de gráfico con un instrumento diferente.

 

Hola, ¿podríais decirme si esto es un bug o estoy equivocado?

Estuve haciendo algunos cálculos, que también se pueden conseguir a través de funciones preparadas, y noté la diferencia.

Estaba calculando el margen, y en el probador el cálculo del margen y AccountInfoDouble(ACCOUNT_MARGIN) dan resultados diferentes, y no hay diferencia en la demo.

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
 

input double lot=0.1;
input int plecho=100;
input double lot_increment=1; //увеличение лота
input int level_size=50;
input int Magic = 0;
input int deviation = 10; //допустимое проскальзывание

double margin, margin_free, uroven, sredstva_pri_s_o, margin_call, stop_out;
int N;



int OnInit(){

Print("Bid ", Bid);

int ticket=OrderSend(NULL, OP_BUY, lot, Ask, 0, 0, 0, "", Magic, 0);
    //ticket=OrderSend(NULL, OP_SELL, lot, Bid, 0, 0, 0);


Print("  ACCOUNT_MARGIN ", AccountInfoDouble(ACCOUNT_MARGIN)
, "  ACCOUNT_MARGIN_LEVEL ", AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));

margin=(OrderLot()*100000*OrderPrice())/plecho;
Print("OrderLot() ", OrderLot(), "  OrderPrice() ", OrderPrice());
margin_free=AccountInfoDouble(ACCOUNT_EQUITY)-margin;
uroven=(AccountInfoDouble(ACCOUNT_EQUITY)/margin)*100;
sredstva_pri_s_o=(margin*AccountInfoDouble(ACCOUNT_MARGIN_SO_SO))/100;
N=(int)NormalizeDouble((AccountInfoDouble(ACCOUNT_BALANCE)-sredstva_pri_s_o)
/MarketInfo(Symbol(), MODE_TICKVALUE), 0);
stop_out=OrderPrice()-(N*Point());

Print("stop_out ", stop_out, "  margin ", margin, "  uroven ", uroven
, "  ACCOUNT_MARGIN_SO_SO ", AccountInfoDouble(ACCOUNT_MARGIN_SO_SO)
, "  ACCOUNT_MARGIN_LEVEL ", AccountInfoDouble(ACCOUNT_MARGIN_LEVEL)
, "  ACCOUNT_MARGIN ", AccountInfoDouble(ACCOUNT_MARGIN));
return(INIT_SUCCEEDED);
}//+------------------------------------------------------------------+
void OnDeinit(const int reason){
}//+------------------------------------------------------------------+
void OnTick(){


Print("  ACCOUNT_MARGIN ", AccountInfoDouble(ACCOUNT_MARGIN)
, "  ACCOUNT_MARGIN_LEVEL ", AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));

Comment("AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL) ", AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL)
, "  AccountInfoDouble(ACCOUNT_MARGIN_SO_SO) ", AccountInfoDouble(ACCOUNT_MARGIN_SO_SO)
, "  AccountInfoDouble(ACCOUNT_MARGIN_LEVEL) ", AccountInfoDouble(ACCOUNT_MARGIN_LEVEL)
, "  AccountInfoDouble(ACCOUNT_MARGIN) ", AccountInfoDouble(ACCOUNT_MARGIN)
, "  MarketInfo(Symbol(), MODE_MARGINREQUIRED) ", MarketInfo(Symbol(), MODE_MARGINREQUIRED) , "\n"
, "margin ", margin
, "  margin_free ", margin_free 
, "  uroven ", uroven );
}//+------------------------------------------------------------------+

double OrderPrice(){
   double count=0;
   for (int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol()  && OrderMagicNumber()==Magic )
            count=OrderOpenPrice();
      }   
   } 
   return(count);   
}
double OrderLot(){
   double count=0;
   for (int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol()  && OrderMagicNumber()==Magic )
            count=OrderLots();
      }   
   } 
   return(count);   
}


 
Por favor, ayuda.

Lo he intentado todo y sigue apareciendo el error 130.
Archivos adjuntos:
Wai_v_5.0.mq4  59 kb
 
Buenas tardes a todos. Estoy intentando escribir un consejero del grial propio ;-). Pero por alguna razón no quiere funcionar. He grabado un vídeo, el enlace al vídeo está en mi mensaje. Esto será más claro y más rápido. La pregunta en sí está en el vídeo. Gracias de antemano. https://youtu.be/tqZrXjMONrE
ВОПРОС ПО НАПИСАНИЮ СОВЕТНИКА
ВОПРОС ПО НАПИСАНИЮ СОВЕТНИКА
  • 2020.12.09
  • www.youtube.com
ПИШУ СОВЕТНИК НА MQL4, А ГДЕ-ТО ДОПУСТИЛ ОШИБКУ- ПОМОИГИТЕ ПОЖАЛУЙСТА ПОНЯТЬ ГДЕ И В ЧЁМ ЭТА ОШИБКА ПОЛУЧИЛАСЬ?
Razón de la queja: