Vim comme idéal pour mql - page 6

 
Vladimir Simakov :

Salut vert, je ne t'ai pas vu depuis des lustres)))) Où est votre cortège ?)))

C'est tout bon. Tout est en place.

 
Dmitry Fedoseev:

C'est tout bon. Tout est en place.

Tu l'as. Je ne savais même pas qu'une telle langue existait jusqu'à maintenant. Vivre et apprendre !
 

Modérateur, pourquoi avez-vous dû le traduire de force ? Juste un échange de salutations entre deux vieux amis, oui, pas en russe, mais celui qui est intéressé pourrait le traduire lui-même.

Pour ceux qui ne sont pas sur le sujet : j'ai écrit dans un anglais ennuyeux, mais Dmitry a vraiment frappé, il a répondu dans le plus pur Telugu, je n'étais même pas au courant. Mais, malheureusement, a couru un modérateur))).

Je plaisante.

 
Vladimir Simakov:

Modérateur, pourquoi avez-vous dû le traduire de force ? Juste un échange de salutations entre deux vieux amis, oui, pas en russe, mais celui qui est intéressé pourrait le traduire lui-même.

Pour ceux qui ne sont pas sur le sujet : j'ai écrit dans un anglais ennuyeux, mais Dmitry a vraiment frappé, il a répondu dans le plus pur Telugu, je n'étais même pas au courant. Mais, malheureusement, le modérateur a eu un accrochage avec )))).

Je plaisante.

Il devrait avoir une médaille au moins. Ils attendent probablement d'être appelés au bureau et de recevoir un certificat de mérite en public !


 
Vitaly Muzichenko:

Eh bien, il n'y a rien de nouveau, tout est en cercle : "Ouvert -> Fondu -> Fermé".

Il était une fois un chantier monolithique, tel qu'il était il y a quelques années : "Assembler le coffrage -> Attacher les armatures -> Couler le béton -> Décoffrer le coffrage" et ainsi de suite en cercle, car on n'en donne pas d'autre :)

Pourquoi ?

cPos=new CRealPosition(cParam);

C'est ainsi que le poste est activé,

//----------------------------------------------------
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);}}

Et c'est ainsi qu'il est accompagné. Et ceci est mql5, sur mql4 le code serait identique. CRealPosition est :

#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);}

Et la CPosition fait déjà partie de la bibliothèque qui accompagne une opération commerciale (qu'il s'agisse de mql4 ou de mql5, bien que la compensation ne soit pas encore totalement mise en œuvre) de l'initiation à la clôture.

Et oui, encore une chose, l'énumération de toutes les positions qui sont dans la grille, qui est un opérateur de grille avec une logique ramifiée, est effectuée comme suit :

#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
 

Un autre communiqué.

1. S'attendre à ce que MK intègre les gardes dans la std est inutile, je pense. Je l'ai fait moi-même. L'idée est la suivante : lors de la première co-implémentation (via F7 dans vime), l'ensemble du répertoire Include sera converti en utf-8 et la garde include sera ajoutée à tous les fichiers (lors des exécutions suivantes, cela ne fonctionnera pas). Dans compile_mql (qui est un script bash) il y a une ligne en haut qui spécifie les sous-répertoires dans Include, où le script ne change rien. L'idée est de ne pas toucher aux données de l'utilisateur.

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

user_include_subdir=""
...

Valeurs possibles :

* empty (default) - fonction désactivée (aucune garde ajoutée, aucun encodage modifié)

* répertoire unique user_include_subdir="any_dir"

* répertoires multiples user_include_subdir="{dir1,dir2}"

C'est-à-dire que nous mettons dans cette variable les répertoires où se trouvent nos propres fichiers d'en-tête. Par exemple, j'ai

user_include_subdir="myincl"

et dans tous les mqh dans ~/.wine/MQL5/Include/myincl et les sous-répertoires ne seront pas ajoutés. Maintenant vous pouvez brancher les en-têtes std de la manière habituelle + clang donnera des indications de type à partir de là.

ZS : lien vers la dernière version dans le profil


#vim_as_mql_ide_2

Dossiers :
 
Vict:

Un autre communiqué.

1. S'attendre à ce que MK intègre les gardes dans la std est inutile, je pense. Je l'ai fait moi-même. L'idée est la suivante : lors de la première co-implémentation (via F7 dans vime), l'ensemble du répertoire Include sera converti en utf-8 et la garde include sera ajoutée à tous les fichiers (lors des exécutions suivantes, cela ne fonctionnera pas). Dans compile_mql (qui est un script bash) il y a une ligne en haut qui spécifie les sous-répertoires dans Include, où le script ne change rien. L'idée est de ne pas toucher aux données de l'utilisateur.

Valeurs possibles :

* empty (default) - fonction désactivée (aucune garde ajoutée, aucun encodage modifié)

* répertoire unique user_include_subdir="any_dir"

* répertoires multiples user_include_subdir="{dir1,dir2}"

C'est-à-dire que nous mettons dans cette variable les répertoires où se trouvent nos propres fichiers d'en-tête. Par exemple, j'ai

et dans tous les mqh dans ~/.wine/MQL5/Include/myincl et les sous-répertoires ne seront pas ajoutés. Maintenant vous pouvez brancher les en-têtes std de la manière habituelle + clang donnera des indications de type à partir de là.

ZS : lien vers la dernière version dans le profil


#vim_as_mql_ide_2

Garda inlude dans std dans vim avec des titres et des invites de type. Je suis intelligemment silencieux et je réfléchis.))) Une idée m'a frappé - peut-être que les MCs ne savent tout simplement pas de quoi il s'agit ?))) Les utilisateurs veulent quelque chose, mais quoi - ils ne savent pas ... Donc ils ne le font pas.))). Vous expliquez en russe populaire ce que vous voulez dire et vous le faites peut-être).
 
Vict:

Un autre communiqué.


la seule chose qui reste est de visser le préprocesseur m4 et d'obtenir ex4/5 à partir d'une vinigrette unique :-)

la solution n'est pas portable (sans matte au moins) même entre une paire de kits linux+wine+metatrader. Le code source résultant sera cloué dans l'IDE sous forme de vim/clang.

 
Maxim Kuznetsov:

La solution n'est pas portable (sans matte, au moins) même entre une paire de suites linux+wine+metatrader. Le code source résultant sera cloué dans l'IDE sous forme de vim/clang.

Non, les exigences sont seulement "~/.wine/drive_c/Program Files/MetaTrader 5" et un lien vers MQL5. C'est un clou ? J'ai été trop hâtif, je n'ai pu que demander le lien MQL5 au bon endroit (je vais peut-être le terminer).

Le compile_mql est un script bash standard, vous pouvez le visualiser/éditer. En dernier recours, exécutez des commandes sed avec les lignes 68-70 (dans la version 2) sur les sources et obtenez en retour du code adapté à metaeditor.

Et en général, vos questions sont fausses, plus intéressant d'autres - J'ai fait ide avec tous les goodies et beaucoup plus de qualité que l'éditeur méta (bien, le même autocomplit modèles, ME ne peut toujours pas le faire et selon Renat il est difficile, enfantin préprocesseur, et la fonctionnalité vim généralement ordre supérieur) sur lequel a travaillé toute l'équipe de codeurs et non pas la première année et pour un prix décent. Vous pourriez même changer tout le compilateur µl en clang. Oui, une entreprise privée efficace, tout le monde prétend avoir des activités importantes, mais en fait la roue est réinventée.

Et laissez-moi vous dire un secret : je ne compte pas sur le millionième public, si quelques geeks l'utilisent, ce n'est pas si mal. Les autres continueront à prier le MC, à mettre docilement des esperluettes devant des tableaux et à déréférencer par un point.

 
Vict:

Non, les exigences sont seulement "~/.wine/drive_c/Program Files/MetaTrader 5" et un lien vers MQL5. C'est un clou ? Et j'ai été trop hâtif, je n'ai pu qu'exiger le lien MQL5 au bon endroit (je vais peut-être le terminer).

Le compile_mql est un script bash standard, vous pouvez le visualiser/éditer. En dernier recours, exécutez des commandes sed avec les lignes 68-70 (dans la version 2) sur les sources et obtenez en retour du code adapté à metaeditor.

Et en général, vos questions sont fausses, plus intéressant d'autres - J'ai fait ide avec tous les goodies et beaucoup plus de qualité que l'éditeur méta (bien, le même autocomplit modèles, ME ne peut toujours pas le faire et selon Renat il est difficile, enfantin préprocesseur, et la fonctionnalité vim généralement ordre supérieur) sur lequel a travaillé toute l'équipe de codeurs et non pas la première année et pour un prix décent. Vous pouvez même changer tout le compilateur µl en clang. Oui, les entreprises privées efficaces, tout le monde prétend avoir des activités importantes, mais en fait ils réinventent la roue.

Je vais vous dire un secret : je ne compte pas sur le millionième public, si quelques geeks l'utilisent, ce n'est pas si mal. Les autres continueront à prier MC, à mettre docilement des esperluettes devant les tableaux et à déréférencer par point.

Si j'ai bien compris, il est toujours souhaitable de mettre des protections et il y a toujours des exigences spéciales au code ?

D'un côté, c'est bien - pourquoi pas ? Je construis moi-même des projets avec plus de 2 fichiers via make :-)

Sans vouloir vous offenser, il ne s'agit pas d'une critique pour le plaisir, mais d'une discussion.

PS/ ici, 9 personnes sur 10 ne pourront pas "quitter VIM" volontairement, sauf pour mettre hors tension :-)