ATcl - MT4용 Tcl 인터프리터 - 페이지 6

 
Maxim Kuznetsov :

소프트웨어 기술 측면에서 - 잠재적으로 그렇습니다. 라이브러리는 클라우드에 없는 동안 옵티마이저에서 호출할 수 있습니다.

국회 측면에서 - 어떻게 상상하십니까?

옵티마이저에서 패스가 만들어지고 데이터가 파일에 쓰여진 다음 훈련을 위해 네트워크로 전송되고 훈련 후 훈련 평가 결과는 MT4/5로 반환되고 네트워크(규칙) 자체 파일에 기록됩니다 . 음, 또 다른 유형은 NS 논리의 기록된 파일에서 (NS 옵션 자체를) 최적화하고 TS의 표준 표시기를 수정하는 경우입니다.

 

Tk 그래픽에 대한 확장된 데모 - 이제 주문 테이블도 표시됩니다.

별도 창의 주문 테이블

주문 테이블을 참조하는 MQL 코드
- 그의 모든 주문을 선택하고 OnOrderList 메서드에서 tcl로 보냅니다.
- 출력에서 새 티켓, 변경된 사항 및 삭제된 티켓의 3가지 티켓 목록을 얻습니다.

 void
SendOrderList() 
{
   int total= OrdersTotal ();
   Tcl_Obj list=tcl.Ref(tcl.Obj()); // пустой список
   for ( int pos= 0 ;pos<total;pos++) {
       if (! OrderSelect (pos, SELECT_BY_POS , MODE_TRADES ) ||
         OrderMagicNumber ()!=MAGIC ||
         OrderSymbol ()!= _Symbol ||
         OrderCloseTime ()!= 0 ) continue ;
      Tcl_Obj ord=tcl.Ref(tcl.List(
         tcl.Obj( OrderTicket ()),
         tcl.Obj( OrderType ()),
         tcl.Obj( OrderOpenTime ()),
         tcl.Obj( OrderSymbol ()),
         tcl.Obj( OrderLots ()),
         tcl.Obj( OrderOpenPrice ()),
         tcl.Obj( OrderStopLoss ()),
         tcl.Obj( OrderTakeProfit ()),
         tcl.Obj( OrderComment ()),
         tcl.Obj( OrderSwap ()),
         tcl.Obj( OrderCommission ())
      ));
      tcl.AppendObj(list,ord);
      tcl.Unref(ord);
   }
   if (tcl.Call(panel,methodOnOrderList,list)!=TCL_OK) {
       PrintFormat ( "OrderSendList failed : %s" ,tcl.StringResult());
   } else {
      Tcl_Obj triplet=tcl.Ref(tcl.Result()); // 0-новые 1-изменённые 2-удалённые
      Tcl_Obj created=tcl.Ref(tcl.Index(triplet, 0 ));   // список новых ордеров
      Tcl_Obj changed=tcl.Ref(tcl.Index(triplet, 1 ));   // список изменённых ордеров
      Tcl_Obj removed=tcl.Ref(tcl.Index(triplet, 2 ));   // список удалённых ордеров
      PrintOrderList( "New orders" ,created);
      PrintOrderList( "Modified orders" ,changed);
      PrintOrderList( "Deleted orders" ,removed);
       // объекты больше ненужны
      tcl.Unref(removed);
      tcl.Unref(changed);
      tcl.Unref(created);
      tcl.Unref(triplet);
   }
}

그리고 대부분의 작업을 수행하는 Tcl 메서드:
- 새로운 주문 목록을 얻습니다.
- 이전 통화 중에 있었던 것과 비교
- 3개의 언급된 목록 작성(신규, 수정, 삭제)
- 동시에 실제로 나무이며 여러 수준으로 만들 수 있는 테이블 ..을 유지합니다.


# надо обновить внутренние структуры
# и вернуть триплет (список из трёх списков)
#   1 - список новых ордеров
#   2 - ордера которые поменялись
#    3 - ордера которые удалены
method OnOrderList { orderList } {
    set created {}
    set changed {}
    set removed {}
    foreach order $orderList {
        set ticket [ lindex $order 0 ]
        set known($ticket) $order
        if { ! [ info exists Orders($ticket) ] } {
            # новый тикет
            # добавить в список свежесозданных
            lappend created $ticket
            set Orders($ticket) $order
            continue
        }
        if { $Orders($ticket) != $order } {
            # что-то поменялось
            # добавить в список изменённых
            set Orders($ticket) $order
            lappend changed $ticket
        }
    }
    foreach ticket [ array names Orders ] {
        if { ! [ info exists known($ticket) ] } {
            # прежнего ордера нет в новом списке - значит удалён
            lappend removed $ticket
            unset Orders($ticket)
        }
    }
    # обновить грфику :-)
    foreach ticket $removed {
        my OnRemoveOrder $ticket
    }
    foreach ticket $changed {
        my OnChangeOrder $ticket
    }
    foreach ticket $created {
        my OnCreateOrder $ticket
    }
    return [ list $created $changed $removed ]
}

모든 것이 매우 컴팩트합니다.
두 언어의 장점을 모두 사용할 수 있습니다 - MQL은 거래 환경에 가깝고 배열로 빠르게 계산되며,
Tcl은 목록과 해시로 다루기 쉽습니다.
MQL에는 엄격한 거래 알고리즘이 구현되어 있으며 세계 및 사용자와의 상호 작용이 스크립트로 구성되어 있습니다.

아카이브를 첨부합니다.

파일:
atcl.zip  6662 kb
 

견적을 Excel로 내보내는 스크립트

견적을 Excel로 직접 내보내기 위한 짧은 스크립트를 만들었습니다.
CSV 및 일반 매개변수의 레코드 없이 차트에 던지기만 하면 Excel 시트가 열리고 모든 따옴표가 여기에 복사됩니다.

본문에 댓글 달아서 첨부합니다. 개인 사이트에서 http://nektomk.ru/atcl:ratestoexcel 스크립트의 세부 사항을 그렸습니다.
볼륨은 포럼의 범위를 벗어납니다. 기분이 나쁠 때 정보가 확실히 손실되지 않도록 로컬 블로그에 복사 할 것입니다.

스크립트를 첨부합니다

PS/ 누구든지 mql의 일괄 컴파일을 위한 make 파일을 가지고 있습니까? 하나의 mqh를 변경하려면 종속성에 나열된 mq4 무리를 만들고 다시 빌드하십시오.

로컬 블로그 https://www.mql5.com/en/blogs/post/718304 의 기사를 업데이트/복제했습니다. 이제 아마도 사라지지 않을 것입니다.
RatesToExcel
  • nektomk.ru
Часто возникающий (и довольно практичный) вопрос у пользователей MetaTrader - «Как скопировать котировки в Excel?» . При помощи библиотеки ATcl это программируется довольно легко. В состав библиотеки входит «большая» программа работающая с Excel, но для частых потребностей сделал короткий скрипт, который делает самую простую вещь - экспорт...
파일:
 

우편 배달부가 작동하고 있지만 설명을 완료하려면 문서화 작업을 더 길게 만들어야 합니다...

그 동안 사람들을 위한 질문 - GUI-Builder가 수요가 있습니까?
Tk의 경우 그렇습니다. 그러나 텍스트로 스크립트를 작성하는 것이 그림에서보다 빠르기 때문에 수요가 거의 없습니다.

이 같은:

PS/ 그런 GUI 구축의 결과는 이제 "이런 어머니"의 도움으로 MT4에서 시작할 수 있습니다..

 
Maxim Kuznetsov :

우편 배달부가 작동하고 있지만 설명을 완료하려면 문서화 작업을 더 길게 만들어야 합니다...

그 동안 사람들을 위한 질문 - GUI-Builder가 수요가 있습니까?
Tk의 경우 그렇습니다. 그러나 텍스트로 스크립트를 작성하는 것이 그림에서보다 빠르기 때문에 수요가 거의 없습니다.

이 같은:

PS/ 그런 GUI 구축의 결과는 이제 "이런 어머니"의 도움으로 MT4에서 시작할 수 있습니다..

어떤 흥미로운 기능이 있습니까 ...하지만 어떻게 적용합니까?

그리고 그래픽 인터페이스 에 대한 아이디어가 있습니다. 의사 결정 트리와 같은 거래 논리를 생성하는 것입니다! 저것들. 우리는 그래픽 편집기(예: 셸)에서 트리를 만들고 버튼을 사용하여 트리를 간단한 규칙으로 변환하거나 심지어 즉시 코드로 변환합니다! 그러나 코드에서 규칙을 매우 간결하게 읽을 수도 있습니다.

이것이 왜 필요한가? 예, 이 접근 방식을 사용하면 거래 전략을 자세히 설명할 수 있습니다. 예를 들어 시계열로 쉽게 나눌 수 있습니다. 우리가 거래/거래하지 않는 결정을 내릴 때뿐만 아니라 현재 우리는 이런 방식으로 거래합니다. 다른 방법으로 시간. 거래 전술의 변화에 대한 다양한 징후가 있으며 코드에서 작성하기가 쉽지 않으며, 첫째, 시각적으로 읽기 어렵습니다. 많은 실수를 할 수 있습니다.

당신의 재능을 적용하기 위한 그러한 아이디어에 관심이 있으십니까?

 
Aleksey Vyazmikin :

어떤 흥미로운 기능이 있습니까 ...하지만 어떻게 적용합니까?

그리고 그래픽 인터페이스에 대한 아이디어가 있습니다. 의사 결정 트리와 같은 거래 논리를 생성하는 것입니다! 저것들. 우리는 그래픽 편집기(예: 셸)에서 트리를 만들고 버튼을 사용하여 트리를 간단한 규칙으로 변환하거나 심지어 즉시 코드로 변환합니다! 그러나 코드에서 규칙을 매우 간결하게 읽을 수도 있습니다.

이것이 왜 필요한가? 예, 이 접근 방식을 사용하면 거래 전략을 자세히 설명할 수 있습니다. 예를 들어 시계열로 쉽게 나눌 수 있습니다. 우리가 거래/거래하지 않는 결정을 내릴 때뿐만 아니라 현재 우리는 이런 방식으로 거래합니다. 다른 방법으로 시간. 거래 전술의 변화에 대한 다양한 징후가 있으며 코드에서 작성하기가 쉽지 않으며, 첫째, 시각적으로 읽기 어렵습니다. 많은 실수를 할 수 있습니다.

당신의 재능을 적용하기 위한 그러한 아이디어에 관심이 있으십니까?

"그래픽 결정 트리"라는 개념을 전혀 이해하지 못했습니다 :-) 적용된 인재가 충분하지 않을 수 있습니다 :-)

 
Maxim Kuznetsov :

"그래픽 결정 트리"라는 개념을 전혀 이해하지 못했습니다 :-) 적용된 인재가 충분하지 않을 수 있습니다 :-)

규칙 집합으로 데이터 테이블 표현



코드의 이러한 규칙은 다음과 같이 구성됩니다.

       for ( int i= 1 ;i<StrokTotal_Buy; i++)
        {
         UslovieSumm_Buy=
                          Sravnenief(arr_Vektor_Week,arrRead_Buy_01[i])+
                          Sravnenief(arr_Vektor_Day,arrRead_Buy_02[i])+
                          Sravnenief(arr_Vektor_Don,arrRead_Buy_03[i])+
                          Sravnenief(arr_DonProc,arrRead_Buy_04[i])+
                          Sravnenief(arr_iDelta_H1,arrRead_Buy_05[i])+
                          Sravnenief(arr_iDelta_H3,arrRead_Buy_06[i])+
                          Sravnenief(arr_iDelta_H4,arrRead_Buy_07[i])+
                          Sravnenief(arr_iDelta_H6,arrRead_Buy_08[i])+
                          Sravnenief(arr_iDelta_H12,arrRead_Buy_09[i])+
                          Sravnenief(arr_iDelta_D1,arrRead_Buy_10[i])+
                          Sravnenief(arr_iDelta_W1,arrRead_Buy_11[i])+
                          Sravnenief(arr_iDelta_MN1,arrRead_Buy_12[i])+
                          Sravnenief(arr_RSI_Open_M1,arrRead_Buy_13[i])+
                          Sravnenief(arr_RSI_Open_H1,arrRead_Buy_14[i])+
                          Sravnenief(arr_BB_Center_Open,arrRead_Buy_15[i])+
                          Sravnenief(arr_BB_Up_Open,arrRead_Buy_16[i])+
                          Sravnenief(arr_BB_Down_Open,arrRead_Buy_17[i])+
                          Sravnenief(arr_TimeH,arrRead_Buy_18[i])+
                          Sravnenief(arr_Den_Nedeli,arrRead_Buy_19[i])+
                          Sravnenief(arr_iDelta_Max_H1,arrRead_Buy_20[i])+
                          Sravnenief(arr_iDelta_Min_H1,arrRead_Buy_21[i])+
                          Sravnenief(arr_iDelta_Max_D1,arrRead_Buy_22[i])+
                          Sravnenief(arr_iDelta_Min_D1,arrRead_Buy_23[i]);                                                                              
;




         if (UslovieSumm_Buy== 23 )
           {
            Pattern_Buy= 1 ;
            Pravilo_Buy=i;
             break ;
           }
        }

규칙의 값과 계산된 값(지표 값/시간/기타 패턴)이 일치하면 예를 들어 거래 작업이 수행됩니다.

이 거래 결정 방법은 매우 간단하고 다양합니다. 예를 들어, 많은 전략에 다른 마법을 부여하여 간단한 방법으로 많은 전략을 인코딩할 수 있습니다.

그러나 여기서 주의할 점은 이러한 스타일의 프로그래밍을 위한 환경만 있으면 된다는 것입니다. 이 환경은 블록(예 : 사전 정의된 값(1,2,3,4 ..n)이 있는 계산 결과 arr_iDelta_Max_D1 및/또는 값을 제한하는 기능, 이러한 방식으로 많은 다른 그룹을 생성하는 기능 ), 이 블록은 각 변수 값 또는 변수 값 범위에 대한 분기를 가지며 다음 블록까지 이런 식으로 계속됩니다. 따라서 우리는 각각의 규칙이 모든 블록을 사용할 필요가 없는 일련의 규칙을 갖게 될 것입니다.

그게 더 명확해? 설명이 필요한 경우 질문하십시오.

 
Aleksey Vyazmikin :

규칙 집합으로 데이터 테이블 표현



코드의 이러한 규칙은 다음과 같이 구성됩니다.

규칙의 값과 계산된 값(지표 값/시간/기타 패턴)이 일치하면 예를 들어 거래 작업이 수행됩니다.

이 거래 결정 방법은 매우 간단하고 다양합니다. 예를 들어, 많은 전략에 다른 마법을 부여하여 간단한 방법으로 많은 전략을 인코딩할 수 있습니다.

그러나 여기서 주의할 점은 이러한 스타일의 프로그래밍을 위한 환경만 있으면 된다는 것입니다. 이 환경은 블록(예 : 사전 정의된 값(1,2,3,4 ..n)이 있는 계산 결과 arr_iDelta_Max_D1 및/또는 값을 제한하는 기능, 이러한 방식으로 많은 다른 그룹을 생성하는 기능 ), 이 블록은 각 변수 값 또는 변수 값 범위에 대한 분기를 가지며 다음 블록까지 이런 식으로 계속됩니다. 따라서 우리는 각각의 규칙이 모든 블록을 사용할 필요가 없는 일련의 규칙을 갖게 될 것입니다.

그게 더 명확해? 설명이 필요한 경우 질문하십시오.

Xcos(http://www.scilab.org/en/scilab/features/xcos) 및 시뮬레이션의 유사한 모드를 좋아합니까?
나는 tcl에서 비슷한 것을 보았습니다. 블록이 화살표로 연결된 환경 .. 그들은 이러한 방식으로 사운드 / 비디오 / 그래픽 처리를 프로그래밍했습니다. http://wiki.tcl.tk/8565 망칠 일이 많은 것 같습니다. 심지어 Maxim을 일부 블록에 집어넣었습니다.
그렇다면 각별히 주의하겠습니다.
Xcos / Features / Scilab / Home - Scilab
Xcos / Features / Scilab / Home - Scilab
  • Scilab Enterprises
  • www.scilab.org
Xcos is a graphical editor to design hybrid dynamical systems models. Models can be designed, loaded, saved, compiled and simulated.
 
Maxim Kuznetsov :
Xcos(http://www.scilab.org/en/scilab/features/xcos) 및 시뮬레이션의 유사한 모드를 좋아합니까?
나는 tcl에서 비슷한 것을 보았습니다. 블록이 화살표로 연결된 환경 .. 그들은 이러한 방식으로 사운드 / 비디오 / 그래픽 처리를 프로그래밍했습니다. http://wiki.tcl.tk/8565 망칠 일이 많은 것 같습니다. 심지어 Maxim을 일부 블록에 집어넣었습니다.
그렇다면 각별히 주의하겠습니다.

예, 그것이 접근 방식입니다! 가장 중요한 것은 일을 복잡하게 하지 않고 올바른 인터프리터를 만들어 모든 블록이 MQL 프로그램이 이미 작동할 한 줄(각각 하나의 분기)에 수집되도록 하는 것입니다.

 
Aleksey Vyazmikin :

예, 그것이 접근 방식입니다! 가장 중요한 것은 일을 복잡하게 하지 않고 올바른 인터프리터를 만들어 모든 블록이 MQL 프로그램이 이미 작동할 한 줄(각각 하나의 분기)에 수집되도록 하는 것입니다.

예를 들어 bwise 코드에서 많은 부분을 파고드는 것과 같이 내가 복잡해질 가능성은 거의 없습니다.

기껏해야 ATcl과 함께 사용(즉, Mql에서 입력으로 데이터 전송)하고 출력을 수신할 수 있도록 조정합니다.
물론 일종의 "사각형 그리는 방법 및 전문가에게 첨부하는 방법"을 작성해야 합니다. 그리고 작가(작가)들과 소통할 때 영어로 열심히 해보세요 :-)