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

 
Mikhail Tkachev:

Pido ayuda a la comunidad...
¿Cómo declarar y crear objetos globales MQL5 correctamente?

Los globales se declaran aquí

//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- 
int      Global_1;
double   Global_2;
string   Global_3;
long     Global_4;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
 
Alexey Viktorov:

No sé cómo decirte que leas la documentación. Si lo ha leído y la función estándar no es adecuada por alguna razón, debería haberlo dicho enseguida...

Bueno, sobre el "envío", ¡que los moderadores decidan a quién y a dónde enviarlo! Ban, por ejemplo... Adivina quién. En cuanto a las funciones regulares, no he visto en la documentación el análisis sintáctico de json y el guardado/escritura de archivos json. Pero tú, como siempre, conoces alguna sección secreta de la documentación donde está todo... Y no sabía... Mierda. Qué vergüenza. Estoy a punto de ser callado por Alexei... :)

 

ayuda gente, voy a abrirun máximo de 2 órdenes a la vez, pongo así no abre ninguna, sin pos_total abre


void OPENORDER(string ord)

  {
    int pos_total=PositionsTotal();
    double priceL=m_symbol.Ask();
   if (pos_total>=2)
   {
   if(ord=="Sell")      
   
        //--- check for free money
            if(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_BUY,my_lot,priceL)<0.0)
               printf("We have no money. Free Margin = %f",m_account.FreeMargin());
            else
      if(!m_trade.Sell(my_lot,Symbol(),m_symbol.Bid(),my_SL,my_TP,""))
         Print("BUY_STOP -> false. Result Retcode: ",m_trade.ResultRetcode(),
               ", description of Retcode: ",m_trade.ResultRetcodeDescription(),
               ", ticket of order: ",m_trade.ResultOrder());                     // Если sell, то не открываемся
     double priceS=m_symbol.Bid();
   if(ord=="Buy")  
         //--- check for free money
            if(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_SELL,my_lot,priceS)<0.0)
               printf("We have no money. Free Margin = %f",m_account.FreeMargin());
            else
      if(!m_trade.Buy(my_lot,Symbol(),m_symbol.Ask(),my_SL,my_TP,""))
 
         Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
               ", description of result: ",m_trade.ResultRetcodeDescription(),
               ", ticket of deal: ",m_trade.ResultDeal());
   return;
 }
}


¿Qué estoy haciendo mal?

 
Eugen8519:

ayuda gente, voy a abrirun máximo de 2 órdenes a la vez, pongo así no abre ninguna, sin pos_total abre



¿Qué estoy haciendo mal?

Has escrito para abrir si ya tienes 2 o más posiciones
if (pos_total<=2)
 
Alexey Viktorov:

Makar, antes hacías lo correcto y ahora quieres hacer lo estúpido...

Piensa en las matemáticas de 5º curso, más o menos. ¿Cuánto es (-3)-(-7) y cuánto es (-3)+(-7)?

Es difícil comprobarlo en una calculadora, Excell te ayudará.


Alexey sabe matemáticas desde el 5º grado. Bravo, Alexey. Sólo el Capitán Hindsight. :)

 
Mihail Matkovskij:

Alexei conoce las matemáticas desde el 5º curso. Bravo, Alexei.

En este caso, se equivoca.
 
MakarFX:

Sí, gracias. He sacado conclusiones precipitadas. Lo tengo bien)

La pregunta no era que la función pudiera tener valores negativos, sino por qué añadir el canje y la comisión al beneficio. Probablemente tú y Alexei no lo entendieron.

Tsaryoff5614 quería calcular el beneficio de la orden en el historial y la función se llamaba lastloss (si habla inglés).

https://www.mql5.com/ru/forum/160683/page1559#comment_23786144

Te has confundido a ti mismo y a mí. Y luego tú y Alexey... Tonto...

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2021.08.02
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
MakarFX:
En este caso se equivoca.

Gracias por el consejo, pero no filtra nada, abre hasta cinco posiciones

   if(InpTrailingOrderLimit==0)
        return;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               if(m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingOrderLimit+ExtTrailingOrderStep)
                  if(m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailingOrderLimit+ExtTrailingOrderStep))        
                       OPENORDER("Buy");
              
                  
              }
            else
              {
               if(m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailingOrderLimit+ExtTrailingOrderStep)
                  if((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailingOrderLimit+ExtTrailingOrderStep))))
                        OPENORDER("Sell");


le dice que abra posiciones, no importa donde ponga pos_total, no funciona

 
Eugen8519:

Gracias por el consejo, pero no filtra nada, abre hasta cinco posiciones


Le dice que abra una posición, no importa donde ponga pos_total, no funciona.

No es necesario eliminar
if (pos_total<=2)

Tengo que cambiar el cartel como he escrito.

 
Mihail Matkovskij:

La pregunta no era que la función pueda tener valores negativos, sino por qué añadir el canje y la comisión al beneficio. Probablemente tú y Alexey no lo entendieron.

Tsaryoff5614 quería calcular el beneficio, pero su función se llamaba lastloss. Se confundió a sí mismo y a mí. Y ahora tú y Alexey... Tonto...

Por eso lo añadimos, para poder calcular todo el beneficio del periodo.

Razón de la queja: