Vim como ide para mql - página 6

 
Vladimir Simakov :

Hola verde, no te he visto en años)))) ¿Dónde está tu caravana?))

Todo está bien. Todo está en su sitio.

 
Dmitry Fedoseev:

Todo está bien. Todo está en su sitio.

Lo tienes. Ni siquiera sabía que existía un lenguaje así hasta ahora. ¡Vive y aprende!
 

Moderador, ¿por qué has tenido que traducirlo a la fuerza? Sólo un intercambio de saludos entre dos viejos amigos, sí, no en ruso, pero quien esté interesado podría traducirlo él mismo.

Para los que no están en el tema: yo escribí en un inglés aburrido, pero Dmitri realmente impactó, me contestó en telugu puro, que ni siquiera sospeché. Pero, por desgracia, corrió un moderador))).

Es una broma.

 
Vladimir Simakov:

Moderador, ¿por qué has tenido que traducirlo a la fuerza? Sólo un intercambio de saludos entre dos viejos amigos, sí, no en ruso, pero quien esté interesado podría traducirlo él mismo.

Para los que no están en el tema: yo escribí en un inglés aburrido, pero Dmitry realmente impactó, me contestó en el más puro telugu, ni siquiera me enteré. Pero, por desgracia, el moderador tuvo un encontronazo con ))))

Es una broma.

Debería recibir una medalla al menos. Probablemente esperando a que le llamen a la oficina y le entreguen un certificado de mérito en público.


 
Vitaly Muzichenko:

Bueno, no hay nada nuevo, todo está en un círculo: "Abierto -> Fundido -> Cerrado".

Una vez trabajé en una obra monolítica, tal y como era hace unos años: "Montar el encofrado -> Atar la ferralla -> Verter el hormigón -> Desencofrar" y así en círculo, porque no se da otra cosa :)

Por qué:

cPos=new CRealPosition(cParam);

Así se activa la posición,

//----------------------------------------------------
void CTradePos::RealControl(uint &mCount,double &mProfit){
   if (cPos.Control(mProfit)){
      if (!cFlag.Check(TRADE_POS_FLAG_ACTIVE)&&cPos.IsActivate()){
         if (!cParam.isExtraLimit) ++mCount;
         cFlag+=TRADE_POS_FLAG_ACTIVE_ON;}}
   else{
      if (!cParam.isExtraLimit&&cFlag.Check(TRADE_POS_FLAG_ACTIVE)) --mCount;
      cFlag+=TRADE_POS_FLAG_STOP_TRADE;
      if (cPos.IsTPClosed()) cFlag+=TRADE_POS_FLAG_STOP_TP;
      DELETE(cPos);}}

Y así es como se acompaña. Y esto es mql5, en mql4 el código sería idéntico. CRealPosition es:

#include <MyMQLLib\Objects\Trade\CPosition.mqh>
#include "CTPTral.mqh"

class CRealPosition:public CPosition
  {
   CTPTral*          cTPTral;
   double            cControlSL;
public:
                     CRealPosition(SOrderParam &mParam);
                    ~CRealPosition() {DEL(cTPTral);}
   bool              Control(double &mProfit);
   bool              CheckChangeSL();
   void              SetNewStops(double mSL,double mTP);
   void              TPTralSet(double mStep,double mPrice,double mTPDelta);
   int               GetSLPoint()   {return !_sl?0:int(MathRound(MathAbs((_price-_sl)/_point)));}
  };

...

void CRealPosition::CRealPosition(SOrderParam &mParam):
   CPosition(_Symbol,
             mParam.type,
             mParam.volume,
             mParam.price,
             mParam.sl,
             mParam.tp,
             0,0,0,
             mParam.comment),
   cTPTral(NULL)
   {cControlSL=cOrderSL;}
//---------------------------------------------------------------------------------------------------------
bool CRealPosition::Control(double &mProfit){
   ulong res=CPosition::Control();
   if (!(res&TRADE_FINISH)) mProfit+=GetTotalProfit();
   if (IsOpen()){
      if (cTPTral!=NULL){
         double price=TradePrice(_symbol,-_direct),
                tp=cTPTral.GetTP(price,GetTP(),_price);
         if (tp!=_tp) NewTP(tp,price);}}
   return !(res&TRADE_FINISH);}

Y la CPosición ya forma parte de la biblioteca que acompaña a una operación comercial (ya sea mql4 o mql5, aunque la compensación aún no está totalmente implementada) desde el inicio hasta el cierre.

Y sí, una cosa más, la enumeración de todas las posiciones que están en la rejilla, que es un operador de rejilla con lógica ramificada, se realiza como sigue:

#define _FIRST (mIsRevers?cTrade.End():cTrade.Begine())
#define _DELETE (mIsRevers?cTrade.Delete():cTrade.DeleteRevers())
#define _NEXT (mIsRevers?cTrade.Prev():cTrade.Next())
uint CGrid::Control(bool mIsRevers){
   double newSL=0.0;
   double trendProfit=0.0,
          oppositeProfit=0.0;
   CheckVirtualSL();
   for (CTrade* it=_FIRST;it!=NULL;){
      if (gFlag.Check(G_FLAG_CLOSE_ALL)) it=it.Close()?_DELETE:_NEXT;
      else{
         bool res=it.Control(cOpenControlCount,trendProfit,oppositeProfit);
         if (it.IsNewOppositeActivate()) ChangePrevOppositeSL(it);
         if (mIsRevers){
            if (!(cFlag&GRID_FLAG_TRAL_START)&&res) StartTral(it);
            if (it.CheckChangeTrendSL()) newSL=it.GetTrendSL();
            else if (newSL!=0.0) it.SetTrendSL(newSL);}
         else{
            if (it.IsStart()) CheckPrevTrades(it);
            if (it.IsNewTrendActivate()){
               ChangePrevTP(it);
               if (cTrade.IsLast()) 
                  cFlag|=GRID_FLAG_LAST_OPEN;}
            if (eIsXProfit&&!(cFlag&GRID_FLAG_X_START)&&res&&it.IsTrendActivate()) CheckXTrade(it);}
         it=res?_NEXT:_DELETE;}}
   if (eIsOppositOrder&&oppositeProfit>trendProfit&&oppositeProfit+trendProfit>=eVirtualTP) gFlag+=G_FLAG_CLOSE_ALL;
   if (!(cFlag&GRID_FLAG_X_START)      &&
       !(gFlag&G_FLAG_CLOSE_ALL)       &&
       bool(cFlag&GRID_FLAG_LAST_OPEN) &&
       eIsXProfit)                     StartXGrid();
   if (cXTrade!=NULL&&!cXTrade.Control()) DELETE(cXTrade);
   return cOpenControlCount.Total();}
#undef _FIRST
#undef _DELETE
#undef _NEXT
 

Otro lanzamiento.

1. Esperar que MK incluya guardias en la std es inútil, creo. Lo hice yo mismo. La idea es la siguiente: durante la primera co-implementación (a través de F7 en vime) todo el directorio Include se convertirá a utf-8 y se añadirá el protector de inclusión a todos los archivos (en las siguientes ejecuciones esto no funcionará). En compile_mql (que es un script bash) hay una línea al principio que especifica los subdirectorios en Include, donde el script no cambia nada. Bueno, la idea es dejar los datos del usuario intactos.

#!/bin/bash
#home  page - https://www.mql5.com/ru/users/vict

user_include_subdir=""
...

Valores posibles:

* vacío (por defecto) - función deshabilitada (no se añaden guardias, no se cambia la codificación)

* directorio único user_include_subdir="any_dir"

* múltiples directorios user_include_subdir="{dir1,dir2}"

Es decir, ponemos en esta variable los directorios donde viven nuestros propios archivos de cabecera. Por ejemplo, tengo

user_include_subdir="myincl"

y en todos los mqh en ~/.wine/MQL5/Include/myincl y subdirectorios no se añadirá. Ahora puedes conectar las cabeceras std de la forma habitual + clang dará pistas de tipo a partir de ahí.

ZS: enlace a la última versión en el perfil


#vim_as_mql_ide_2

Archivos adjuntos:
 
Vict:

Otro lanzamiento.

1. Esperar que MK incluya guardias en la std es inútil, creo. Lo hice yo mismo. La idea es la siguiente: durante la primera co-implementación (a través de F7 en vime) todo el directorio Include se convertirá a utf-8 y se añadirá el protector de inclusión a todos los archivos (en las siguientes ejecuciones esto no funcionará). En compile_mql (que es un script bash) hay una línea al principio que especifica los subdirectorios en Include, donde el script no cambia nada. Bueno, la idea es dejar los datos del usuario intactos.

Valores posibles:

* vacío (por defecto) - función deshabilitada (no se añaden guardias, no se cambia la codificación)

* directorio único user_include_subdir="any_dir"

* múltiples directorios user_include_subdir="{dir1,dir2}"

Es decir, ponemos en esta variable los directorios donde viven nuestros propios archivos de cabecera. Por ejemplo, tengo

y en todos los mqh en ~/.wine/MQL5/Include/myincl y subdirectorios no se añadirá. Ahora puedes conectar las cabeceras std de la forma habitual + clang dará pistas de tipo a partir de ahí.

ZS: enlace a la última versión en el perfil


#vim_as_mql_ide_2

Garda inlude en std en vim con encabezados y avisos de tipo. Estoy siendo inteligentemente silencioso y reflexivo)). Una idea me golpeó - tal vez los MCs simplemente no saben lo que es?)) Los usuarios quieren algo, pero lo que - no sé ... Así que no lo hacen)). Explica en ruso popular lo que quieres decir y tal vez lo hagas).
 
Vict:

Otro lanzamiento.


lo único que queda es atornillar el preprocesador m4 y obtener ex4/5 de una vinagreta única :-)

la solución no es portable (sin mate al menos) incluso entre un par de kits de linux+vino+metatrader. El código fuente resultante se clavará en el IDE como vim/clang.

 
Maxim Kuznetsov:

La solución no es portable (sin mate, al menos) incluso entre un par de paquetes linux+vino+metatrader. El código fuente resultante se clavará en el IDE como vim/clang.

No, los requisitos son sólo "~/.wine/drive_c/Program Files/MetaTrader 5" y un enlace a MQL5. ¿Es un clavo? Y me apresuré demasiado, sólo pude requerir el enlace MQL5 en el lugar correcto (puede que lo termine).

El compile_mql es un script bash estándar, puedes verlo/editarlo. Como último recurso, ejecute los comandos sed con las líneas 68-70 (en la versión 2) sobre las fuentes y obtenga de vuelta el código adecuado para el metaeditor.

Y, en general, sus preguntas son erróneas, más interesantes otros - He hecho ide con todas las golosinas y mucho más alta calidad que el editor de meta (bueno, las mismas plantillas autocomplit, ME todavía no puede hacerlo y de acuerdo con Renat es difícil, preprocesador infantil, y la funcionalidad vim generalmente de orden superior) en el que trabajó todo el equipo de codificadores y no el primer año y por una tarifa decente. Incluso puedes cambiar todo el compilador de µl a clang. Sí, la empresa privada eficiente, todo el mundo pretende ser actividades importantes, pero en realidad se reinventa la rueda.

Y permítanme contar un secreto: no cuento con la millonésima audiencia, si un par de frikis lo usan, no está mal. El resto seguirá rezando al MC, poniendo obedientemente ampersands delante de arrays y dereferenciando a través de un punto.

 
Vict:

No, los requisitos son sólo "~/.wine/drive_c/Program Files/MetaTrader 5" y un enlace a MQL5. ¿Es un clavo? Me apresuré demasiado, sólo pude requerir el enlace MQL5 en el lugar correcto (puede que lo termine).

El compile_mql es un script bash estándar, puedes verlo/editarlo. Como último recurso, ejecute los comandos sed con las líneas 68-70 (en la versión 2) sobre las fuentes y obtenga de vuelta el código adecuado para el metaeditor.

Y, en general, sus preguntas están equivocadas, más interesantes otros - He hecho ide con todas las golosinas y mucho más alta calidad que el editor de meta (bueno, las mismas plantillas autocomplit, ME todavía no puede hacerlo y de acuerdo con Renat es difícil, preprocesador infantil, y la funcionalidad vim generalmente de orden superior) en el que trabajó todo el equipo de codificadores y no el primer año y por una tarifa decente. Incluso puedes cambiar todo el compilador de µl a clang. Sí, la empresa privada eficiente, todos pretenden ser actividades importantes, pero en realidad reinventan la rueda.

Bueno, voy a contar un secreto: no cuento con la millonaria audiencia, si un par de frikis lo usan, no está mal. El resto seguirá rezando a MC, poniendo obedientemente ampersands delante de arrays y dereferencias.

Si lo he entendido bien, ¿todavía es deseable poner guardias y todavía hay requisitos especiales para el código?

Por un lado, es bueno, ¿por qué no? Yo mismo construyo proyectos con más de 2 archivos a través de make :-)

Sin ánimo de ofender, no es una crítica porque sí, es una discusión

PS/ aquí 9 de cada 10 no podrán "salir de VIM" de buena gana, excepto para apagar :-)