mqlのIDEとしてのVim - ページ 6

 
Vladimir Simakov :

greenさん、お久しぶりです)))です。)あなたの車列はどこですか?)

大丈夫です。すべてが揃った。

 
Dmitry Fedoseev:

大丈夫です。すべてが揃った。

やったねそんな言語があることも今まで知りませんでした。ライブ・アンド・ラーニング!
 

司会 なぜ無理に訳したのですか?旧友2人のあいさつを交わすだけ。そう、ロシア語ではないけれど、興味のある人は自分で翻訳してみてください。

私はつまらない英語で書いたのですが、ドミトリーは本当にびっくりして、最も純粋なテルグ語で答えてくれたんです。 しかし、残念ながら、モデレーターを走らせました))。

冗談です。

 
Vladimir Simakov:

司会 なぜ無理に訳したのですか?旧友2人のあいさつを交わすだけ。そう、ロシア語ではないけれど、興味のある人は自分で翻訳してみてください。

私はつまらない英語で書いたのですが、ドミトリーは本当にびっくりして、最も純粋なテルグ語で答えてくれたんです。しかし、残念ながら、司会者が走ってきてしまいました)))

冗談です。

せめてメダルを書き出す必要がある。おそらく、誰かが彼をオフィスに呼び出して、みんなの前で賞状を渡すのを待っているのだろう。


 
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で)インクルードディレクトリ全体がutf-8に変換され、すべてのファイルにインクルードガードが追加されます(次の実行では、これは動作しません)。compile_mql (これはbashスクリプトです) の一番上に、Includeのサブディレクトリを指定する行がありますが、ここではスクリプトは何も変更されません。まあ、ユーザーデータはそのままにしておくということです。

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

user_include_subdir=""
...

可能な値。

* empty (デフォルト) - 機能無効 (ガード追加なし、エンコーディング変更なし)

* 単一ディレクトリ 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で)インクルードディレクトリ全体がutf-8に変換され、すべてのファイルにインクルードガードが追加されます(次の実行では、これは動作しません)。 compile_mql (これはbashスクリプトです) の一番上に、Includeのサブディレクトリを指定する行がありますが、ここではスクリプトは何も変更されません。まあ、ユーザーデータはそのままにしておくということです。

可能な値。

* empty (デフォルト) - 機能無効 (ガード追加なし、エンコーディング変更なし)

* 単一ディレクトリ 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で見出しとタイププロンプトを表示します。スマートに沈黙して反省しています)))あるアイデアが私を襲った - 多分MCはちょうどそれが何であるかを知らないのだろうか?だから、しないのです)))。ポピュラーなロシア語で意味を説明し、多分やるんでしょう)
 
Vict:

もう一つのリリース


あとは、m4プリプロセッサをねじ込んで、独自のビニグレットからex4/5を取得するのみです :-)

このソリューションは、Linux+ワイン+メタトレーダーのキット間でさえ、(少なくともマットなしで)ポータブルではありません。出来上がったソースコードは、IDEにvim/clangとして釘付けにされます。

 
Maxim Kuznetsov:

このソリューションは、linux+wine+metatraderのパッケージのペア間でもポータブルではありません(少なくともmatteなし)。出来上がったソースコードは、IDEにvim/clangとして釘付けにされます。

いいえ、必要なのは「~/.wine/drive_c/Program Files/MetaTrader 5」と「MQL5へのリンク」だけです。釘ですか?また、急ぎすぎたのか、MQL5のリンクは適当なところでしか要求できませんでした(完成するかもしれません)。

compile_mqlは標準的なbashスクリプトで、表示/編集が可能です。最後の手段として、68-70行目(リリース2)のsedコマンドをソース上で実行すると、metaeditorに適したコードが返されます。

そして一般的に、あなたの質問は、より興味深い他人が間違っている - 私はすべてのグッズとメタエディタ(まあ、同じautocomplitテンプレート、私はまだそれを行うことができないとRenatによると、それは難しい、幼稚なプリプロセッサ、および機能VIM一般的に高い順序)よりもはるかに高い品質と理想を作ったコーダーのチーム全体としない最初の年に働いて、適切な手数料のために。µlコンパイラ全体をclangに変更することも可能です。そう、効率的な民間企業、誰もが重要な活動をするように見せかけて、実は車輪を再発明しているのです。

そして、秘密にしておきたいのは、私は100万人の観客をあてにしていないことです。数人のギークが使ってくれるなら、それは悪いことではありません。あとは、MCに祈り続け、従順にアンパサンドを配列の前に置き、ポイントを介してデリファレンスすることになる。

 
Vict:

いいえ、必要なのは「~/.wine/drive_c/Program Files/MetaTrader 5」と「MQL5へのリンク」だけです。釘ですか?急ぎすぎて、適当にMQL5のリンクを要求するくらいしかできませんでした(完成するかもしれません)。

compile_mqlは標準的なbashスクリプトで、表示/編集が可能です。最後の手段として、68-70行目(リリース2)のsedコマンドをソース上で実行すると、metaeditorに適したコードが返されます。

そして一般的に、あなたの質問は、より興味深い他人が間違っている - 私はすべてのグッズとメタエディタ(まあ、同じautocomplitテンプレート、私はまだそれを行うことができないとRenatによると、それは難しい、幼稚なプリプロセッサ、および機能VIM一般的に高い順序)よりもはるかに高い品質と理想を作ったコーダーのチーム全体としない最初の年に働いて、適切な手数料のために。μlのコンパイラを全部clangに変えてもいいくらいです。そう、効率的な民間企業では、誰もが重要な活動をするように見せかけて、実は車輪の再発明をしているのです。

まあ、秘密にしておきますが、私は100万人の観客を当てにしているわけではなく、数人のギークが使ってくれるなら、悪くないと思います。あとは、MCに祈り続け、従順にアンパサンドを配列の前に置き、ポイント経由でデリファレンスすることになります。

私の理解では、やはりガードを付けることが望ましく、コードに特別な要求があるのでしょうか?

一方では、それは良いことだ、なぜいけないのか?私自身は、2つ以上のファイルを持つプロジェクトを makeで構築しています :-)

悪気はないのですが......わざわざ批評することでもなく、議論することです

PS/ここでは、10人中9人は、パワーダウンを除いて、「VIMを終了」することができないでしょう :-)