Vim come ide per mql - pagina 6

 
Vladimir Simakov :

Ciao verde, non ti vedo da secoli)))) Dov'è il tuo corteo?)))

Va tutto bene. Tutto è al suo posto.

 
Dmitry Fedoseev:

Va tutto bene. Tutto è al suo posto.

Ci siamo capiti. Non sapevo nemmeno che esistesse una tale lingua fino ad ora. Vivi e impara!
 

Moderatore, perché ha dovuto tradurlo forzatamente? Solo uno scambio di saluti tra due vecchi amici, sì, non in russo, ma chi è interessato potrebbe tradurlo da solo.

Per chi non è in tema: ho scritto in un inglese noioso, ma Dmitry ha davvero colpito, ha risposto nel Telugu più puro, non lo sapevo nemmeno io. Ma, purtroppo, correva un moderatore))).

Stavo solo scherzando.

 
Vladimir Simakov:

Moderatore, perché ha dovuto tradurlo forzatamente? Solo uno scambio di saluti tra due vecchi amici, sì, non in russo, ma chi è interessato potrebbe tradurlo da solo.

Per chi non è in tema: ho scritto in un inglese noioso, ma Dmitry ha davvero colpito, ha risposto nel Telugu più puro, non lo sapevo nemmeno io. Ma, sfortunatamente, il moderatore ha avuto un incidente))))

Stavo solo scherzando.

Dovrebbe ricevere almeno una medaglia. Probabilmente aspetta di essere chiamato in ufficio e di ricevere un certificato di merito in pubblico!


 
Vitaly Muzichenko:

Beh, non c'è niente di nuovo, tutto è in un cerchio: "Aperto -> Fuso -> Chiuso".

Una volta lavoravo in un cantiere monolitico, proprio come qualche anno fa: "Assemblato la cassaforma -> Legato l'armatura -> Versato il calcestruzzo -> Spogliato la cassaforma" e così via in un cerchio, perché non se ne danno altri :)

Perché:

cPos=new CRealPosition(cParam);

Questo è il modo in cui la posizione viene attivata,

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

E questo è il modo in cui è accompagnato. E questo è mql5, su mql4 il codice sarebbe identico. CRealPosition è:

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

E la CPosition è già una parte della libreria che accompagna un'operazione commerciale (che sia mql4 o mql5, anche se il netting non è ancora completamente implementato) dall'inizio alla chiusura.

E sì, un'altra cosa, l'enumerazione di tutte le posizioni che sono nella griglia, che è un operatore di griglia con logica ramificata, viene eseguita come segue:

#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 altro rilascio.

1. Aspettarsi che MK includa le guardie in std è inutile, credo. L'ho fatto io stesso. L'idea è questa - durante la prima co-implementazione (tramite F7 in vime) l'intera directory Include sarà convertita in utf-8 e l'include guard sarà aggiunto a tutti i file (nelle esecuzioni successive questo non funzionerà). In compile_mql (che è uno script bash) c'è una linea in alto che specifica le sottodirectory in Include, dove lo script non cambia nulla. Beh, l'idea è di lasciare i dati dell'utente intatti.

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

user_include_subdir=""
...

Valori possibili:

* empty (default) - funzione disabilitata (nessuna guardia aggiunta, nessuna codifica cambiata)

* singola directory user_include_subdir="any_dir"

* directory multiple user_include_subdir="{dir1,dir2}"

Cioè mettiamo in questa variabile le directory dove vivono i nostri file header. Per esempio ho

user_include_subdir="myincl"

e in tutti i mqh in ~/.wine/MQL5/Include/myincl e le sottodirectory non saranno aggiunti. Ora potete inserire le intestazioni std nel solito modo + clang darà suggerimenti di tipo da lì.

ZS: link all'ultima versione nel profilo


#vim_as_mql_ide_2

File:
 
Vict:

Un altro rilascio.

1. Aspettarsi che MK includa le guardie in std è inutile, credo. L'ho fatto io stesso. L'idea è questa - durante la prima co-implementazione (tramite F7 in vime) l'intera directory Include sarà convertita in utf-8 e l'include guard sarà aggiunto a tutti i file (nelle esecuzioni successive questo non funzionerà). In compile_mql (che è uno script bash) c'è una linea in alto che specifica le sottodirectory in Include, dove lo script non cambia nulla. Beh, l'idea è di lasciare i dati dell'utente intatti.

Valori possibili:

* empty (default) - funzione disabilitata (nessuna guardia aggiunta, nessuna codifica cambiata)

* singola directory user_include_subdir="any_dir"

* directory multiple user_include_subdir="{dir1,dir2}"

Cioè mettiamo in questa variabile le directory dove vivono i nostri file header. Per esempio ho

e in tutti gli mqh in ~/.wine/MQL5/Include/myincl e le sottodirectory non saranno aggiunti. Ora potete inserire le intestazioni std nel solito modo + clang darà suggerimenti di tipo da lì.

ZS: link all'ultima versione nel profilo


#vim_as_mql_ide_2

Garda inlude in std in vim con intestazioni e richieste di tipo. Sono intelligentemente silenzioso e riflessivo.))) Un'idea mi ha colpito - forse i MCs semplicemente non sanno di cosa si tratta?))) Gli utenti vogliono qualcosa, ma cosa - non so ... Quindi non lo fanno)). Spiega in russo popolare cosa intendi e magari fallo).
 
Vict:

Un altro rilascio.


l'unica cosa che rimane è avvitare il preprocessore m4 e ottenere ex4/5 da una vinigrette unica :-)

la soluzione non è portatile (senza opacità almeno) nemmeno tra un paio di kit linux+wine+metatrader. Il codice sorgente risultante sarà inchiodato all'IDE come vim/clang.

 
Maxim Kuznetsov:

La soluzione non è portabile (senza opacità, almeno) nemmeno tra una coppia di suite linux+wine+metatrader. Il codice sorgente risultante sarà inchiodato all'IDE come vim/clang.

No, i requisiti sono solo "~/.wine/drive_c/Program Files/MetaTrader 5" e un link a MQL5. È un chiodo? E sono stato troppo frettoloso, potrei richiedere solo il link MQL5 nel posto giusto (potrei finirlo).

Il compile_mql è uno script bash standard, puoi visualizzarlo/modificarlo. Come ultima risorsa, eseguite i comandi sed con le linee 68-70 (nella release 2) sui sorgenti e otterrete un codice adatto al metaeditor.

E in generale, le vostre domande sono sbagliate, più interessanti altri - ho fatto ide con tutte le chicche e molto più alta qualità di meta editor (beh, gli stessi modelli autocomplit, ME ancora non può farlo e secondo Renat è difficile, preprocessore infantile, e funzionalità vim generalmente ordine superiore) su cui ha lavorato l'intero team di coder e non il primo anno e per una tassa decente. Si potrebbe anche cambiare l'intero compilatore µl con clang. Sì, efficiente business privato, tutti fingono di essere attività importanti, ma in realtà la ruota è reinventata.

E lasciatemi dire un segreto - non conto sul milionesimo pubblico, se un paio di geek lo useranno, non è male. Il resto continuerà a pregare l'MC, mettendo obbedientemente le ampolle davanti agli array e dereferenziando attraverso un punto.

 
Vict:

No, i requisiti sono solo "~/.wine/drive_c/Program Files/MetaTrader 5" e un link a MQL5. È un chiodo? E sono stato troppo frettoloso, potrei richiedere solo il link MQL5 nel posto giusto (potrei finirlo).

Il compile_mql è uno script bash standard, puoi visualizzarlo/modificarlo. Come ultima risorsa, eseguite i comandi sed con le linee 68-70 (nella release 2) sui sorgenti e otterrete un codice adatto al metaeditor.

E in generale, le vostre domande sono sbagliate, più interessanti altri - ho fatto ide con tutte le chicche e molto più alta qualità di meta editor (beh, gli stessi modelli autocomplit, ME ancora non può farlo e secondo Renat è difficile, preprocessore infantile, e funzionalità vim generalmente ordine superiore) su cui ha lavorato l'intero team di coder e non il primo anno e per una tassa decente. Si potrebbe anche cambiare l'intero compilatore µl con clang. Sì, efficiente business privato, tutti fingono di essere attività importanti, ma in realtà reinventano la ruota.

Beh, dirò un segreto - non conto sul milionesimo pubblico, se un paio di geek lo useranno, non è male. Il resto continuerà a pregare MC, mettendo obbedientemente le ampolle davanti agli array e dereferenziando per punti.

Se ho capito bene, è ancora auspicabile mettere delle protezioni e ci sono ancora dei requisiti speciali al codice ?

Da un lato è buono - perché no? Io stesso costruisco progetti con più di 2 file attraverso make :-)

Senza offesa - non è una critica per il gusto di farlo, è una discussione

PS/ qui 9 su 10 non saranno in grado di "uscire da VIM" volontariamente, a parte lo spegnimento :-)