mql의 ide로서의 Vim - 페이지 6

 
Vladimir Simakov :

안녕, 그린, 나는 당신을 오랫동안 보지 못했습니다))) 당신의 은신처는 어디 있습니까?)))

모든 것이 정상입니다. 모든 것이 제자리에 있습니다.

 
Dmitry Fedoseev :

모든 것이 정상입니다. 모든 것이 제자리에 있습니다.

당신을 배우십시오. 나는 지금까지 그런 언어의 존재조차 몰랐다. 살고 배우십시오!
 

진행자님, 왜 강제로 번역해야 했을까요? 두 명의 오랜 친구 사이의 인사 교환에 불과합니다. 글쎄요, 러시아어는 아니지만 관심이 있는 사람들을 위해 제가 직접 번역할 수 있습니다.

모르는 사람들을 위해 : 나는 지루한 영어로 썼지 만 Dmitry는 정말로 나를 감동 시켰고 가장 순수한 텔루구어로 대답했습니다. 나는 이것에 대해 의심조차하지 않았습니다. 그러나 불행히도 중재자는 통과했습니다)))

농담.

 
Vladimir Simakov :

진행자님, 왜 강제로 번역해야 했을까요? 두 명의 오랜 친구 사이의 인사 교환에 불과합니다. 글쎄요, 러시아어는 아니지만 관심이 있는 사람들을 위해 제가 직접 번역할 수 있습니다.

모르는 사람들을 위해 : 나는 지루한 영어로 썼지 만 Dmitry는 정말로 나를 감동 시켰고 가장 순수한 텔루구어로 대답했습니다. 나는 이것에 대해 의심조차하지 않았습니다. 그러나 불행히도 중재자는 통과했습니다)))

농담.

최소한 메달은 써야 합니다. 아마도 사무실로 전화를 걸어 모든 사람 앞에서 증명서를 줄 때까지 기다리고 있을 것입니다!


 
Vitaly Muzichenko :

따라서 새로운 것은 없으며 모든 것이 원 안에 있습니다. "열림 -\u003e 트롤 -\u003e 닫힘"

옛날 옛적에 나는 몇 년 전과 같은 방식으로 건설 현장에서 모놀리스 작업을 했습니다. "거푸집 조립 -> 보강재 묶음 -> 콘크리트 채우기 -> 거푸집 해체" 다른 사람이 없기 때문에 원 안에 있습니다 :)

글쎄, 왜 안 돼:

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는 중요하지 않지만 netting은 아직 완전히 구현되지는 않았습니다).

그리고 네, 한 번 더, 그리드에 있는 모든 위치의 열거, 이것이 그리드이고 분기 논리를 사용하여 다음과 같이 수행됩니다.

 #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에서 가드를 표준에 포함시키기 위해 기다리는 것은 쓸모가 없다고 생각합니다. 내가 스스로 해냈다. 아이디어는 이것입니다. 첫 번째 컴파일 동안(wim에서 F7을 통해) 전체 Include 디렉토리가 utf-8로 변환되고 include 가드가 모든 파일에 추가됩니다(이 모든 것은 후속 실행 시 수행되지 않음). compile_mql(bash 스크립트)에는 스크립트가 아무 것도 편집하지 않는 Include의 하위 디렉터리를 나타내는 줄이 맨 위에 있습니다. 사용자 데이터가 건드리지 않도록 하는 것이 좋습니다.

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

user_include_subdir= ""
...

가능한 값:

* 비어 있음(기본값) - 기능이 비활성화됨(가드가 추가되지 않고 인코딩이 변경되지 않음)

* 하나의 디렉토리 user_include_subdir="any_dir"

* 다중 디렉토리 user_include_subdir="{dir1,dir2}"

음, 즉 헤더 파일이 있는 디렉토리를 이 변수에 만듭니다. 예를 들어 나는

user_include_subdir= "myincl"

~/.wine/MQL5/Include/myincl 및 하위 디렉토리의 모든 mqhs에 가드가 추가되지 않습니다. 이제 일반적인 방식으로 std 헤더를 포함할 수 있습니다. + clang은 거기에서 유형 힌트를 제공합니다.

PS: 프로필의 최신 버전 링크


#vim_as_mql_ide_2

파일:
 
Vict :

다음 릴리스.

1. MK에서 가드를 표준에 포함시키기 위해 기다리는 것은 쓸모가 없다고 생각합니다. 내가 스스로 해냈다. 아이디어는 이것입니다. 첫 번째 컴파일 동안(wim에서 F7을 통해) 전체 Include 디렉토리가 utf-8로 변환되고 include 가드가 모든 파일에 추가됩니다(이 모든 것은 후속 실행 시 수행되지 않음). compile_mql(bash 스크립트)에는 스크립트가 아무 것도 편집하지 않는 Include의 하위 디렉터리를 나타내는 줄이 맨 위에 있습니다. 사용자 데이터가 건드리지 않도록 하는 것이 좋습니다.

가능한 값:

* 비어 있음(기본값) - 기능이 비활성화됨(가드가 추가되지 않고 인코딩이 변경되지 않음)

* 하나의 디렉토리 user_include_subdir="any_dir"

* 다중 디렉토리 user_include_subdir="{dir1,dir2}"

음, 즉 헤더 파일이 있는 디렉토리를 이 변수에 만듭니다. 예를 들어 나는

~/.wine/MQL5/Include/myincl 및 하위 디렉토리의 모든 mqhs에 가드가 추가되지 않습니다. 이제 일반적인 방식으로 std 헤더를 포함할 수 있습니다. + clang은 거기에서 유형 힌트를 제공합니다.

PS: 프로필의 최신 버전 링크


#vim_as_mql_ide_2

헤더 및 유형 힌트와 함께 wim std에 가드를 포함합니다. 영리하게 나는 조용히 이해하고 있습니다.))) 아이디어가 있습니다 - 아마도 MK가 그것이 무엇에 관한 것인지 모를 것입니까?))) 사용자는 무언가를 원하지만 무엇인지 명확하지 않습니다 ... 그래서 그들은하지 않습니다.))) 당신은 당신이 볼 수 있고 그것을 할 수 있는 것을 대중적인 러시아어로 설명합니다.))
 
Vict :

다음 릴리스.


전처리기로 m4를 조이고 독특한 vinaigrette에서 ex4 / 5를 얻는 것이 남아 있습니다 :-)

이 솔루션은 한 쌍의 linux+wine+metatrader 제품군 간에도 (최소한 맹세 없이) 이식할 수 없습니다. 결과 소스는 IDE에 vim/clang으로 고정됩니다.

 
Maxim Kuznetsov :

이 솔루션은 한 쌍의 linux+wine+metatrader 제품군 간에도 (최소한 맹세 없이) 이식할 수 없습니다. 결과 소스는 IDE에 vim/clang으로 고정됩니다.

아니요, 요구 사항은 "~/.wine/drive_c/Program Files/MetaTrader 5" 및 MQL5에 대한 링크뿐입니다. 손톱이야? 그러다가 급해서 MQL5 링크만 적당한 곳에서 요구할 수 있게 되었어요.

그리고 compile_mql은 일반 bash 스크립트이므로 보고/편집할 수 있습니다. 최소한 소스에서 라인 번호 68-70(릴리스 2)으로 sed 명령을 실행하고 메타에디터에 적합한 코드를 다시 얻으십시오.

일반적으로 당신은 잘못된 질문을 했고 다른 사람들은 더 흥미로웠습니다. 무릎을 꿇고 며칠 만에 메타에디터보다 훨씬 더 높은 품질과 모든 장점으로 아이디어를 만들었습니다(음, 동일한 템플릿 자동 완성, ME는 여전히 ' 하는 방법을 알지 못하며 Renat에 따르면 전체 코더 팀이 1년 이상 동안 작업한 어린이용 전처리기 및 wim의 기능이 일반적으로 훨씬 더 높습니다. 괜찮은 보상. 전체 컴파일러를 clang으로 변경할 수도 있습니다. 예, 효율적인 개인 사업, 모두가 중요한 활동을 묘사하지만 실제로 바퀴는 재발명됩니다.

글쎄, 나는 당신에게 비밀을 말할 것입니다 - 나는 백만 번째 청중을 믿지 않습니다. 두 명의 괴짜가 그것을 사용한다면 나쁘지 않습니다. 나머지는 계속해서 MK에 기도하고 배열 앞에 앰퍼샌드를 배치하고 점을 통해 역참조합니다.

 
Vict :

아니요, 요구 사항은 "~/.wine/drive_c/Program Files/MetaTrader 5" 및 MQL5에 대한 링크뿐입니다. 손톱이야? 그러다가 급해서 MQL5 링크만 적당한 곳에서 요구할 수 있게 되었어요.

그리고 compile_mql은 일반 bash 스크립트이므로 보고/편집할 수 있습니다. 최소한 소스에서 라인 번호 68-70(릴리스 2)으로 sed 명령을 실행하고 메타에디터에 적합한 코드를 다시 얻으십시오.

일반적으로 당신은 잘못된 질문을 했고 다른 사람들은 더 흥미로웠습니다. 무릎을 꿇고 며칠 만에 메타에디터보다 훨씬 더 높은 품질과 모든 장점으로 아이디어를 만들었습니다(음, 동일한 템플릿 자동 완성, ME는 여전히 ' 하는 방법을 알지 못하며 Renat에 따르면 전체 코더 팀이 1년 이상 동안 작업한 어린이용 전처리기 및 wim의 기능이 일반적으로 훨씬 더 높습니다. 괜찮은 보상. 전체 컴파일러를 clang으로 변경할 수도 있습니다. 예, 효율적인 개인 사업, 모두가 중요한 활동을 묘사하지만 실제로 바퀴는 재발명됩니다.

글쎄, 나는 당신에게 비밀을 말할 것입니다 - 나는 백만 번째 청중을 믿지 않습니다. 두 명의 괴짜가 그것을 사용한다면 나쁘지 않습니다. 나머지는 계속해서 MK에 기도하고 배열 앞에 앰퍼샌드를 배치하고 점을 통해 역참조합니다.

올바르게 이해했다면 여전히 가드를 넣는 것이 바람직하고 코드에 대한 특별한 요구 사항이 있습니까?

한편으로는 좋은 일입니다. 나는 스스로 make를 통해 2개 이상의 파일 프로젝트 를 수집합니다 :-)

기분을 상하게하지 마십시오-이것은 그것을위한 비판이 아닙니다. 이것은 토론입니다

PS/ 여기에서 10명 중 9명은 전원을 끄는 것 외에는 스스로의 의지로 "VIM을 종료"할 수 없습니다 :-)