구조 바위. 우리는 프로그램을 구성하고 가능성, 오류, 솔루션 등을 탐색하는 방법을 배웁니다. - 페이지 6

 
FAQ :

추신. 그리고 그런 voosche melenko, 좀 더 글로벌한 문제를 가집니까?

구체적인 제안이 있으십니까?
 
MetaDriver :

글쎄요, (일반적으로) 어떻게 이 격차를 상위 4위 안에 들 수 있습니까? 모든 것이 DLL에 있습니까? :)

DLL 없음, 이벤트 처리 를 위한 순수 MCL + winepi .

이와 관련하여 우리는 모든 것을 아름답게 묘사하고 훌륭한 기사를 작성하는 시간을 찾아야합니다. MT4에 대한 시각적 의사 클래스의 구현 또는 예제를 던질 수 있지만 자세한 설명 없이는 소화하기 어려울 것 같습니다. JS와 유추하여 MT용 DOM(Data Object Module)을 만드는 것의 본질은 어쨌든 정말 비슷합니다. 종자의 경우 - 말하자면 심장의 주요 기능:

 //+------------------------------------------------------------------+
//| Brief Description included Functions                             |
/*+----exported function---------------------------------------------+
bool   ObjSet(ObjNm,ObjTyp,isets[],tsets[],{ObjParent})Устанавливает на график объект класса Interface.
void   ObjDelete(string nm,bool delChild=true) Удаляет объект с графика, вместе , или без первого потомка
void   ObjsDelete(string nm) Удаляет объект, вместе со всеми его потомками
double ObjGet(string nm, int prop_id) Ищет объект и возвращает значение его свойства
bool   ObjSearch(string ObjNm):int[];string; Возвращает признак наличия объекта класса Interface
int    This(int prop_id) Ищет значение свойства объекта в списке свойств : obj_props[10]
//+----internal function---------------------------------------------+
string ObjGetName(string,int[],{string})  Собирает полное имя объекта класса Interface
void   ObjSetLabel()Обертка для стандартной функции
*/ //+----------------------------------------------------------------+
//|                                      OBJECTS_INTERFACE_CLASS.mq4 |
//|           Copyright © 2012, XrustSolution. mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, XrustSolution."
#property link        "mail: xrustx@gmail.com https://www.youtube.com/user/opmlv http://forexrust.info"
//+------------------------------------------------------------------+
//|   Extern variables                                               |
//+------------------------------------------------------------------+
extern    string    ObjectsInterfaceSettings = "-------- ObjectsInterfaceSettings ----------" ;
extern    int       X_Distance                                = 2       ;
extern    int       Y_Distance                                = 2       ;
extern    int       ChartCorner                               = 0       ;

//+------------------------------------------------------------------+
//|   Defines                                                        |
//+------------------------------------------------------------------+
#define GlobalPrefix     "wnd:"    // Префикс имени класса
#define GlobalParent     "chart"    // Имя глобального родителя
#define hName           "Header" // Имя главного родителя (заголовка)
#define wName           "Window" // Имя главного окна
#define cName           ""        // Стандартное имя текущего объекта
#define tName           "Txt"    // Стандартное имя для текстовой строки
#define Objects 500                // Максимальное количество командных объектов
//+------------------------------------------------------------------+
//|   Global variables                                               |
//+------------------------------------------------------------------+
string ObjParent = "" ;           // Глобальное имя родителя Object Parent Name
string ObjName   = "" ;           // Глобальное имя объекта  Object Own Name
int     obj_props[ 10 ];             // Набор свойств объекта : {xdLeft,ydUp,xdRight,ydDown,zIndex,Class,Corner,Color,Window};
//+------------------------------------------------------------------+
string   ObjsParent[Objects];     // Список имен родителей командных объектов
string   ObjsNames[Objects];       // Список имен командных объектов
int      CommObjs[Objects][ 6 ];     // Список параматров командных объектов = {класс,угол,х0,у0,х1,у1}
string   ObjsDom[Objects][ 2 ];     // Список всех объектов и их дочерних элементов (объектов) ObjsDom[Parent][Childrens]
string   ObjsDel[ 5000 ];           // Список старых объектов для удаления при перемещении окон  
string   ObjsName[ 5000 ];       // Список полных имен объектов
//+------------------------------------------------------------------+
//|   Defines                                                        |
//+-----ObjectsTypes-------------------------------------------------+
#define         OBJ_CANVAS       30        // Холст\Окно\Прямоугольник (Основной элемент)
//+---Предопределенные типы окон-------------------------------------+
#define         OBJ_WINDOW     31 // Пустое окно
#define         OBJ_TXTWND     32 // Текстовое окно с форматированием текста
#define         OBJ_HTMWND     33 // Текстовое окно с форматированием, активными ссылками
#define         OBJ_CHARTW     34 // Псевдографическое окно с возможностями граф построений
//#define       OBJ_LEDWND     34 // 

//+---Кнопки командные-----------------------------------------------+ 
#define   OBJ_BUTTON      40 // Кнопка (пустая) общего назначения
//----Кнопки предопределенные(Команда)
#define   OBJ_BUTBUY     41 // OP_BUY
#define   OBJ_BUTSEL     42 // OP_SELL
#define   OBJ_BUTCLO     43 // ORDER_CLOSE
#define   OBJ_BUTREV     44 // ORDER_REVERSE
#define   OBJ_BUTBST     45 // OP_BUYSTOP
#define   OBJ_BUTBLM     46 // OP_BUYLIMIT
#define   OBJ_BUTSST     47 // OP_SELLSTOP
#define   OBJ_BUTSLM     48 // OP_SELLLIMIT
#define   OBJ_BUTDEL     49 // ORDER_DELETE
//+---Ярлыки командные (кнопки 1х1 с значком)------------------------+
#define   OBJ_LABCNT     50 // Командный ярлык (Контрол) Без обкладки в виде канваса 1х1 наследие двигательного аппарата команд
#define   OBJ_LABCOM     51 // Командный ярлык кнопка 1х1 с канвасом (пустой) 
//----Ярлыки предопределенные(Команда)
         /*----Группа ярлыков кнопок находящихся в заголовке (верхнем меню)---*/
#define   OBJ_LABCLO     52 // Ярлык/Кн.закрыть
#define   OBJ_LABHID     53 // Ярлык/Кн.Свернуть
#define   OBJ_LABSHW     54 // Ярлык/Кн.развернуть
#define   OBJ_LABSET     55 // Ярлык/Кн.Настройки
         /*----Двухцветные ярлычки (триггеры(серый\зеленый))----*/
#define   OBJ_LABALR     56 // Ярлык/Кн.Алерт
#define   OBJ_LABSND     57 // Ярлык/Кн.Звук
#define   OBJ_LABEML     58 // Ярлык/Кн.Мыло
#define   OBJ_LABSEL     59 // Ярлык/Кн.Select\Unselect
         /*----Группа ярлыков стрелок и др предустановленных спец символов---*/
#define   OBJ_LABLFT     60 // Ярлык/Стрелка Влево
#define   OBJ_LABRGT     61 // Ярлык/Стрелка Вправо
#define   OBJ_LABUP       62 // Ярлык/Стрелка Вверх
#define   OBJ_LABDWN     63 // Ярлык/Стрелка Вниз
     
#define   OBJ_LAB_TXT     69 // Текстовая строка / значек в ярлыке
//+----Хидеры(заголовки)-Основной родительский объект, наследует все остальные+
#define   OBJ_HD         70 // Пустой хидер (прямоугольник 1 размера блока)
#define   OBJ_HDC         71 // + Кнока закрытия
#define   OBJ_HDH         72 // + Кнопка свернуть\развернуть
#define   OBJ_HDCH       73 // + закрыть + развернуть
#define   OBJ_HDCHT       74 // + закрыть + развернуть + настройки
#define   OBJ_HDСHTS     75 // + закрыть + развернуть + настройки + системное меню алертов
//+-----ObjectProperties---------------------------------------------+
#define   OBJ_PRP_X0         17    // левая координата (Х0)
#define   OBJ_PRP_Y0         18    // верхняя координата (Y0)
#define   OBJ_PRP_X1         19    // правая координата (Х0) 
#define   OBJ_PRP_Y1         20    // нижняя координата (Х0)
#define   OBJ_PRP_ZI         21    // Зет Индекс
#define   OBJ_PRP_CLS         22    // Класс Объекта
#define   OBJ_PRP_CRN         23    // Угол привязки объекта
#define   OBJ_PRP_CLR         24    // Цвет
#define   OBJ_PRP_WND         25    // Окно в котором объект находиться
#define   OBJ_PRP_LAY         26    // Резерв (здесь будет количество слоев, для более точного определения параметров элементов)
//+-----Массив аргументов для функции GetObjectName()----------------+
int      Props[ 10 ];                                                      
//              Props[0] = Лево         
//              Props[1] = Верх 
//              Props[2] = Право        
//              Props[3] = Низ  
//              Props[4] = Счетчик по Х 
//              Props[5] = Счетчик по У 
//              Props[6] = Зет индекс (основной)        
//              Props[7] = Зет индекс (дополнительный для объектов из нескольких слоев) 
//              Props[8] = Идентификатор зет индекса последнего (верхнего) слоя в объекте
//              Props[9] = Идентификатор типа объекта                                           
//+---Массивы с корректыми размерами шрифтв Webdings для >= 416 билда---------------+
int realSz[ 21 ] = { 15 , 23 , 31 , 35 , 43 , 47 , 55 , 67 , 75 , 83 , 87 , 91 , 95 , 99 , 119 , 123 , 127 , 143 , 148 , 156 , 164 }; // Таблица реальных размеров
int fontSz[ 21 ]  = { 11 , 17 , 23 , 26 , 32 , 35 , 41 , 50 , 56 , 62 , 65 , 68 , 71 , 74 , 89 , 92 , 95 , 107 , 110 , 116 , 122 }; // Таблица корректных шрифтов
int szCorr[ 21 ] = { 4 , 5 , 6 , 7 , 9 , 10 , 12 , 15 , 17 , 19 , 20 , 21 , 22 , 23 , 28 , 29 , 30 , 34 , 36 , 38 , 40 }; // Разница между размером шрифта, и реальным размером
int vertCr[ 21 ] = {- 3 ,- 2 ,- 1 ,- 1 ,- 2 , 0 ,- 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,   0 , - 1 ,   0 ,   0 ,   0 ,   0 ,   0 }; // Таблица cмещения по вертикали от размера шрифта

//+------------------------------------------------------------------+
//|  Includes                                                        |
//+------------------------------------------------------------------+
#include <OBJ_CANVAS.mqh> //SetCanvas(onm,xd,yd,xs,ys,[sz,zindx,oClr,crn,wnd,pnm,bord,bClr]);
#include <OBJ_LAB_TEXT.mqh> //SetTextString(onm,pnm,typ,txt,fnm,clr,[center,xd,yd,psz,fsz,crn,wnd]):int:error;
//#include <OBJ_BUTTON.mqh>//SetButton(onm,pnm,type[,xd,yd,xs,ys,text,tx_fnt,txClr,sz,bgClr,bdClr,crn,wnd]);
#include <OBJ_HEADER.mqh>
#include <OBJ_LED_SIMPLE.mqh>
//+------------------------------------------------------------------+
//|           Function  : string GetObjectName(string,int[],{string})|
//|           Copyright © 2012, XrustSolution. mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
//|                     Собирает полное имя объекта класса Interface |
//+------------------------------------------------------------------+
//|Полное имя объекта должно состоять из :                           |
//|wnd:        = Основной префикс имени                         4 зн |
//|z_0ax:      = Z индекс для опр. порядка отображения окна 1-9 6 зн |10 зн
//|c_30:       = Тип объекта класса (смотреть в списке типов)   5 зн |15 зн
//|lu_xxx_yyy: = Координаты левого верхнего угла               10 зн |25 зн
//|rd_xxx_yyy: = Координаты правого нижнего угла               10 зн |35 зн
//|id_xxx_yyy: = Номера объектов                               10 зн |45 зн
//|#name|parent= Собственное имя обьекта из максимум 15 знаков,    до|60 зн
//|состоящее из имени элемента класса, и имени родительского объекта |
//+------------------------------------------------------------------+
//|Разделители:  типов свойств     = двоеточите(:),                  |
//|              значений свойств  = нижнее подчеркивание(_)         |
//|              имя объекта       = решетка(#)конец описания свойств|
//|              имя родителя      = слеш[|]                         |
//+------------------------------------------------------------------+
string     ObjGetName( string Name,                                   // Имя объекта
                                                         int       Props[],                                 // Набор свойств объекта
                                                         string Parent = GlobalParent                   // Имя родителя, по умолчанию = "chart" , то есть основное окно графика
                                                        ){ string out= "" ;
//+------------------------------------------------------------------+
   if (Parent== "" ){Parent = "chart" ;}
   if (Props[ 9 ]!=OBJ_LAB_TXT){ // если объект текстовая строка добавляем в описание имя шрифта
        out = StringConcatenate (GlobalPrefix,                                   //
                                                                         "z_" ,Props[ 6 ],StringSetChar( "" , 0 ,Props[ 7 ]+ 97 ),StringSetChar( "" , 0 ,Props[ 8 ]+ 97 ), ":" ,
                                                                         "c_" ,Props[ 9 ], ":" ,
                                                                         "lu_" ,Props[ 0 ], "_" ,Props[ 1 ], ":" ,
                                                                         "rd_" ,Props[ 2 ], "_" ,Props[ 3 ], ":" ,
                                                                         "id" ,Props[ 4 ], "" ,Props[ 5 ], ":" ,
                                                                         "#"   ,Name    , "|" ,Parent);
        } else { // работаем как обычно
        out = StringConcatenate (GlobalPrefix,                                   //
                                                                         "z_" ,Props[ 6 ],StringSetChar( "" , 0 ,Props[ 7 ]+ 97 ),StringSetChar( "" , 0 ,Props[ 8 ]+ 97 ), ":" ,
                                                                         "c_" ,Props[ 9 ], ":" ,
                                                                         "lu_" ,Props[ 0 ], "_" ,Props[ 1 ], ":" ,
                                                                         "fn_font_name:" ,
                                                                         "id" ,Props[ 4 ], "" ,Props[ 5 ], ":" ,
                                                                         "#"   ,Name    , "|" ,Parent);
        }                                                               
         return (out);
}
메타드라이버 :
구체적인 제안이 있으십니까?

거기에 임무가 살아 있지만 여기에서 발음하기가 두렵습니다. 개인적으로 할 수 있습니다.

 
C-4 :
이제 일반 프로그래머는 순서도를 그리지 않습니다. 이 모든 것은 학생들을 가르치기 위해 고안된 이론적 넌센스이지만 실제 프로젝트에서 작업하기 위한 것은 아닙니다.
이것은 말도 안되는 소리가 아닙니다. 이것은 프로그램이 기계어 코드로 작성될 때 필요했습니다. 그리고는 교과서에 실려 일반 언어로 프로그램을 설명하면 넌센스가 되었습니다. 그리고 ESPD-통합 프로그램 문서 시스템도있었습니다. 그리고 고객에게 프로그램을 넘기기 위해서는 매우 엄격한 규칙에 따라 작성해야 했습니다. 그리고 블록다이어그램은 모든 종류의 설명이어야 했습니다.
 
FAQ :

DLL 없음, 이벤트 처리 를 위한 순수 MCL + winepi .

이와 관련하여 우리는 모든 것을 아름답게 묘사하고 훌륭한 기사를 작성하는 시간을 찾아야합니다. MT4에 대한 시각적 의사 클래스의 구현 또는 예제를 던질 수 있지만 자세한 설명 없이는 소화하기 어려울 것 같습니다. JS와 유추하여 MT용 DOM(Data Object Module)을 만드는 것의 본질은 어쨌든 정말 비슷합니다. 종자의 경우 - 말하자면 심장의 주요 기능:

예 ushsh .. 대규모로. ))

DOM은 강력합니다. 적어도 몇 개의 스크린샷이나 다른 것을 가지고 갑시다. 모든 것이 어떻게 보이는지 확인하십시오. 또는 (가능한 경우) 터미널에서 이것을 느낄 수 있는 일부 독립 실행형 컴파일된 예제. 하나가 있습니까?

 
MetaDriver :

예 ushsh .. 대규모로. ))

DOM은 강력합니다. 적어도 몇 개의 스크린샷이나 다른 것을 가지고 갑시다. 모든 것이 어떻게 보이는지 확인하십시오. 또는 (가능한 경우) 터미널에서 이것을 느낄 수 있는 일부 독립 실행형 컴파일된 예제. 하나가 있습니까?

여기를 참조하십시오: https://www.youtube.com/user/opmlv 개발 방법을 볼 수 있습니다. :)
Rustamzhan Salidzhanov
Rustamzhan Salidzhanov
  • www.youtube.com
Краткая сборка софта созданного мной , для торговой платформы MetaTrader 4. Все имущественные права на данный софт принадлежат заказчикам, как правообладателям. И не могут быть переданы третим лицам без их (правообладателей) согласия. Я за собою оставляю авторское право как создатель данного софта. Quick assembly of software created by me for...
 
MetaDriver :

퍼즐을 풀어볼까요?

아무것도.

1. 꼬리에 즉시 패널. 전략이 기본이고 쟁기질하지 않으면 패널은 무의미하고 쓸모가 없습니다.

2. 트레이딩 부분의 구현은 전략에 따라 다르므로 가상 전략에 대한 공격의 일환으로 논의 할 사항이 없습니다. 전략의 구현은 이상하게도 전략에 따라 다릅니다. :)

3. 거래 블록에서 고려되는 전략 비활성화를 위한 트리거를 즉시 생성합니다. 그리고 새 주문 배치를 비활성화합니다.

4. 패널. 글쎄요, 패널은 일상입니다.

 

TS를 작성하는 방법은 다음과 같습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MT5에 대한 고주파 거래 토론

hrenfx , 2013.02.06 14:30


Простой и довольно эффективной логикой написания боевого робота является следующая схема:
- робот делится на две части: тестер и синхронизатор.
- тестер на основании ранней истории и только что пришедшей выдает текущее состоянии торговой стратегии.
- синхронизатор "переносит" текущие тестерные открытые позиции и приказы на реал.

Это чем-то напиминает копирование торговых сигналов с одного счета на другой. Только вместо примитивного копировщика работает грамотный синхронизатор.

К сожалению, правильную логику синхронизатора посмотреть где-либо практически невозможно, поэтому озадачевшемуся придется подумать самому - очень полезно.

Но и такая логика построения боевого-робота далеко не совершенна, т.к. встает дилема первичности курицы и яйца. Поэтому применяются более сложные свои схемы, основанные на опыте автора-алготрейдера.

Все эти действия совершаются только ради одного - адекватной настройки стратегии. Какой бы совершенной не была схема, все равно одинаковые боевые роботы на разных счетах одного и того же ECN/STP брокера покажут расхождения. И помимо поиска рыночных закономерностей, важной задачей для алготрейдера также является уменьшение этих расхождений. Как уже говорилось выше, чем ближе брокер к возможстям HFT, тем меньше расхождения.

Если вникнуть в написанное, должно прийти понимание, что результаты работы стратегии на реале являются также своего рода тестером. И выводы на основании этой торговли также должны быть вероятностными.

 
TheXpert :

아무것도.

1. 꼬리에 즉시 패널. 전략이 기본이고 쟁기질하지 않으면 패널은 무의미하고 쓸모가 없습니다.

2. 트레이딩 부분의 구현은 전략에 따라 다르므로 가상 전략에 대한 공격의 일환으로 논의 할 사항이 없습니다. 전략의 구현은 이상하게도 전략에 따라 다릅니다. :)

3. 즉시 거래 블록에서 고려되는 전략 비활성화를 위한 트리거를 만드십시오. 그리고 새 주문 배치를 비활성화합니다.

4. 패널. 글쎄요, 패널은 일상입니다.

글쎄, 바로 논쟁 할 것이 있습니다 ... :))

논쟁하지 말고 가능한 옵션을 지적합시다.

1. 꼬리에 즉시 패널. 전략이 기본이고 쟁기질하지 않으면 패널은 무의미하고 쓸모가 없습니다.

지금은 동의하지만 주의할 점은 다음과 같습니다. 프로그램은 즉시 두 가지 모드에서 작동하도록 지향되어야 하므로 패널의 통제 여부와 유무를 고려하여 전략적/거래 부분을 즉시 처방해야 합니다. 패널에 정보를 표시합니다.

2. 트레이딩 부분의 구현은 전략에 따라, .......

그리고 여기에서는 필요하지 않습니다. 나와는 거의 관련이 없습니다. 전체 거래 부분은 주문, 위치 추적, 견적 및 거래와 관련된 기타 쓰레기를 완전히 구현하는 클래스(CMarketDriver)로 작성됩니다. 모든 악기를 한 번에. 그리고 전략적 부분은 그에게 도구에 대한 권장 시장 위치를 입력으로만 제공합니다. {string Instrument; 형식의 구조 배열을 채웁니다 . double Position} 및 MD.Synhronize(PositionArray) 서버와의 동기화를 요청합니다. 그리고 pse. 지금까지는 시장가 주문만 거래했지만 스프레드 내에서 지정가 주문을 거래하는 버전이 개발 중입니다(거래 비용 절감). 나는 거래를 위해 이익실현/정지 손실을 사용하지 않지만, MarketDriver는 서버와의 장기간 연결이 끊긴 경우 보호 정지를 설정할 수 있습니다(정지 매개변수는 드라이버 설정에서 한 번 지정됨). 그건 그렇고, 매우 성공적이며 거의 문제가 없는 구조적 솔루션입니다. 테스터에서 전략적 아이디어를 테스트하기 위해 일반적으로 노래 - 거래에 문제가 없으며 모든 관심을 전략에 집중할 수 있습니다. 모든 거래는 오랫동안 디버깅되고 거래 드라이버에 캡슐화되었습니다.

2............., 따라서 가상의 전략에 대한 공격의 일부로 논의할 것이 없습니다. 전략의 구현은 이상하게도 전략에 따라 다릅니다. :)

글쎄, 당신은 불도저에서 여기에서 지정할 수 있습니다. 토론할 순전히 쓰레기였습니다. 예를 들어, 신선한 아이디어가 떠올랐습니다. 한 쌍의 마카롱이 교차하는 지점에서 거래할 수 있습니다. 천재 맞죠? 이 경우의 작업은 개발 중에(예: 세 번째 대시 추가) 대부분의 코드를 변경할 필요가 없도록 프로그램을 구성하는 것입니다. 이상적으로는 꽤 많이 그리고 엄격하게 로컬 영역(12개 모듈이 아님)에 있습니다. 그런 다음 다중 통화로의 개발이 가능합니다(프로젝트의 단순성을 위해 상품 거래는 엄격하게 독립적이며 상호 연결은 어리석게 고려되지 않는다고 가정합니다). 그러한 발전을 미리 예상하고 전략적 부분을 어떻게 구성합니까?

3. 즉시 거래 블록에서 고려되는 전략 비활성화를 위한 트리거를 만드십시오. 그리고 새 주문 배치를 비활성화합니다.

여기에서 조금 씹을 수 있습니다. 그러나 반드시 그런 것은 아닙니다. 결국 여기에는 특별한 어려움이 예상되지 않습니다.

4. 패널. 글쎄요, 패널은 일상입니다.

나는 정말로 동의하지 않는다. 물론 패널 자체는 일상적입니다. 그러나 패널과 전략의 이벤트 연결을 구성하는 것은 상당히 창의적인 작업입니다. 특히 그러한 패널을 위한 다소 보편적인 템플릿을 개발하려는 경우, 이는 프로젝트 시 다른 Expert Advisors에 쉽게 적응하고 쉽게 개발할 수 있음을 의미합니다. 성장/발전합니다.

 
MetaDriver :

그리고 여기에서는 필요하지 않습니다. 나와는 거의 관련이 없습니다.

그것은 거의 항상 나에게 달려 있습니다. 특히 ECN과 협력하는 경우. 음, 즉 물론 모든 것이 가장 낮은 수준이 아니라 표준거래 기능 의 껍질을 통해 이루어집니다.

Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Торговые функции - Документация по MQL5
 
TheXpert :

그것은 거의 항상 나에게 달려 있습니다 . 특히 ECN과 협력하는 경우. 음, 즉 물론 모든 것이 가장 낮은 수준이 아니라 표준 거래 기능 의 껍질을 통해 이루어집니다.

글쎄, 이것은 일종의 나쁜 것입니다. ECN과의 관계가 그곳에서 어떻게 발전할지 모르지만(RoboForex에서 계정을 개설할 예정입니다), 이 구조적 분리(전략/시장 동인)를 유지하기 위해 최선을 다할 것입니다. 그것은 매우 편리하여 약간의 거래 비용(예: 이익 손실)에도 대비할 수 있습니다.

메인 EA 루프가 결국 어떻게 보이는지 확인하십시오.

 // Тестовый советник для тестирования обученных в GPU-оптимизаторе нейросеток (или записи значений котировок/индикаторов для отправки исходных данных в тот же оптимизатор).
void OnTick ()
  {
   if (Mode==TradesMode) //-- Если режим тестирования
     {
       for ( int i= 0 ;i<CountInd;i++)
        {
         vInds[i]=GetInd(i, 0 );   // получаем значения индикаторов
        }
      Net.CalcResult(vInds);             // рассчитываем значение нейросетки
       float net_result=Net.NetResult[ 0 ];  // забираем рекомендованную рыночную позицию      
      SP.Pos=net_result*Lot;             // заполняем структуру для MarketDriver'a
       int err;
      MD.Synhronize(SP,err);             // синхронизируемся с торговым сервером.
     }
   else // Mode==RecordMode  // Если режим записи
..............
단순화된 테스트 버전을 보면 이 계획이 마음에 드실 것입니다. 있다면 필요에 맞게 수정하여 건강에 사용하십시오.
파일: