将Vim作为mql的理想工具 - 页 6

 
Vladimir Simakov :

嗨,绿色,很久没有见到你了))))。你的车队在哪里?)

这一切都很好。一切都已就绪。

 
Dmitry Fedoseev:

这一切都很好。一切都已就绪。

你得到了它。直到现在我才知道有这样一种语言的存在。活到老,学到老!
 

主持人,你为什么要强行翻译呢?只是两个老朋友之间的问候交流,是的,不是用俄语,但谁有兴趣可以自己翻译一下。

对于那些不在这个问题上的人来说:我用枯燥的英语写作,但德米特里真的很震撼,他用纯粹的泰卢固语回答,我甚至没有怀疑。 但是,不幸的是,跑了一个版主)))。

开个玩笑。

 
Vladimir Simakov:

主持人,你为什么要强行翻译呢?只是两个老朋友之间的问候交流,是的,不是用俄语,但谁有兴趣可以自己翻译一下。

对于那些不在这个问题上的人来说:我用无聊的英语写,但德米特里真的很震撼,他用最纯正的泰卢固语回答,我甚至不知道这一点。但是,不幸的是,主持人发生了冲突))))

开个玩笑。

至少应该得到一枚奖章。可能是在等待被叫到办公室,当众颁发功劳证书吧!


 
Vitaly Muzichenko:

好吧,没有什么新东西,一切都在一个循环中:"打开->融化->关闭"。

曾几何时,我在一个单一的建筑工地工作,就像几年前一样:"组装模板 -> 绑扎钢筋 -> 浇筑混凝土 -> 拆除模板",如此循环往复,因为没有给出其他 :)

为什么?

cPos=new CRealPosition(cParam);

这是该职位的激活方式。

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

而这就是它的伴随方式。而这是mql5,在mql4上,代码会是相同的。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);}

而CPosition已经是伴随着交易操作(无论是mql4还是mql5,尽管净值化还没有完全实现)从开始到结束的库的一部分。

对了,还有一件事,枚举所有在网格中的位置,这是一个具有分支逻辑的网格操作者,其执行方式如下。

#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
 

又一次发布。

1.指望MK将守卫纳入STD是没有用的,我认为。自己做的。这个想法是这样的--在第一次共同实施期间(通过vime中的F7),整个Include目录将被转换为utf-8,并且include guard将被添加到所有文件中(在接下来的运行中,这将不会起作用)。在compile_mql(这是一个bash脚本)中,顶部有一行指定了Include中的子目录,脚本在这里不做任何改变。那么,这个想法是让用户数据不被触动。

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

user_include_subdir=""
...

可能的值。

* empty (default) - 功能禁用(没有添加防护装置,没有改变编码)。

*单一目录 user_include_subdir="any_dir"

*多个目录 user_include_subdir="{dir1,dir2}"

也就是说,我们把我们自己的头文件所在的目录放在这个变量中。例如,我有

user_include_subdir="myincl"

以及~/.wine/MQL5/Include/myincl和子目录中的所有mqh将不会被添加。现在你可以用通常的方式插入std头文件+clang会从那里给出类型提示。

ZS:配置文件中的最新版本链接


#vim_as_mql_ide_2

附加的文件:
 
Vict:

又一次发布。

1.指望MK将守卫纳入STD是没有用的,我认为。自己做的。这个想法是这样的--在第一次共同实施期间(通过vime中的F7),整个Include目录将被转换为utf-8,并且include guard将被添加到所有文件中(在接下来的运行中,这将不会起作用)。 在compile_mql(这是一个bash脚本)中,顶部有一行指定了Include中的子目录,脚本在这里不做任何改变。那么,这个想法是让用户数据不被触动。

可能的值。

* empty (default) - 功能禁用(没有添加防护装置,没有改变编码)。

*单一目录 user_include_subdir="any_dir"

*多个目录 user_include_subdir="{dir1,dir2}"

也就是说,我们把我们自己的头文件所在的目录放在这个变量中。例如,我有

以及~/.wine/MQL5/Include/myincl和子目录中的所有mqh将不会被添加。现在你可以用通常的方式插入std头文件+clang会从那里给出类型提示。

ZS:在简介中提供最新版本的链接


#vim_as_mql_ide_2

Garda inlude in std in vim with headings and type prompts.我在聪明地沉默和反思。))))。我想到了一个想法--也许主持人只是不知道这是怎么回事? 用户想要什么,但什么--不知道......。所以他们不这样做。)你用通俗的俄语解释一下你的意思,也许就能做到)。
 
Vict:

又一次发布。


唯一剩下的就是在M4预处理程序中拧紧,并从一个独特的醋酸盐中获得ex4/5 :-)

该解决方案是不可移植的(至少在没有哑光的情况下),即使是在一对Linux+葡萄酒+metatrader套件之间。产生的源代码将以vim/clang的形式被钉在IDE上。

 
Maxim Kuznetsov:

该解决方案是不可移植的(至少没有消光),即使在一对linux+wine+metatrader软件包之间。产生的源代码将以vim/clang的形式被钉在IDE上。

不,要求只是"~/.wine/drive_c/Program Files/MetaTrader 5 "和一个MQL5的链接。这是一个钉子吗?我太匆忙了,我只能要求MQL5链接在正确的地方(我可能会完成它)。

compile_mql是一个标准的bash脚本,你可以查看/编辑它。作为最后的手段,在源代码上运行68-70行的sed命令(在第2版中),得到适合元编辑的代码。

总的来说,你的问题是错误的,更有趣的是其他人--我已经做了ide与所有的好东西和更高的质量比meta编辑器(嗯,同样的自动拆分模板,ME仍然不能做到这一点,根据Renat它是困难的,幼稚的预处理器,和功能vim一般更高的顺序)上工作的整个团队的编码,而不是第一年,并为一个体面的费用。你甚至可以把整个μl编译器改为clang。是的,高效的私营企业,每个人都假装是重要的活动,但实际上车轮是重新发明的。

让我告诉你一个秘密--我并不指望百万级的观众,如果有几个极客会使用它,那就不错了。其余的人将继续向主持人祈祷,顺从地在数组前面加上安培号,通过一个点进行解构。

 
Vict:

不,要求只是"~/.wine/drive_c/Program Files/MetaTrader 5 "和一个MQL5的链接。这是一个钉子吗?我太匆忙了,我只能要求MQL5链接在正确的地方(我可能会完成它)。

compile_mql是一个标准的bash脚本,你可以查看/编辑它。作为最后的手段,在源代码上运行68-70行的sed命令(在第2版中),得到适合元编辑的代码。

总的来说,你的问题是错误的,更有趣的是其他人--我已经做了ide与所有的好东西和更高的质量比meta编辑器(嗯,同样的自动拆分模板,ME仍然不能做到这一点,根据Renat它是困难的,幼稚的预处理器,和功能vim一般更高的顺序)上工作的整个团队的编码,而不是第一年,并为一个体面的费用。你甚至可以把整个μl编译器改为clang。是的,高效的私营企业,每个人都假装是重要的活动,但实际上他们重新发明了车轮。

好吧,我告诉你一个秘密--我不指望百万分之一的观众,如果有几个极客会使用它,那就不错了。其余的人将继续向MC祈祷,顺从地在数组前面加上安培号,并通过点进行解引用。

如果我没有理解错的话,还是应该设置防护措施,而且对规范还有特殊要求?

一方面,这很好--为什么不呢?我自己也是通过make构建有2个以上文件的项目:-)

无意冒犯--这不是为了批评而批评,而是一种讨论

PS/ 在这里,10人中有9人不会心甘情愿地 "退出VIM",除非是断电 :-)