Краткая сборка софта созданного мной , для торговой платформы MetaTrader 4. Все имущественные права на данный софт принадлежат заказчикам, как правообладателям. И не могут быть переданы третим лицам без их (правообладателей) согласия. Я за собою оставляю авторское право как создатель данного софта. Quick assembly of software created by me for...
Простой и довольно эффективной логикой написания боевого робота является следующая схема: - робот делится на две части: тестер и синхронизатор. - тестер на основании ранней истории и только что пришедшей выдает текущее состоянии торговой стратегии. - синхронизатор "переносит" текущие тестерные открытые позиции и приказы на реал.
Это чем-то напиминает копирование торговых сигналов с одного счета на другой. Только вместо примитивного копировщика работает грамотный синхронизатор.
К сожалению, правильную логику синхронизатора посмотреть где-либо практически невозможно, поэтому озадачевшемуся придется подумать самому - очень полезно.
Но и такая логика построения боевого-робота далеко не совершенна, т.к. встает дилема первичности курицы и яйца. Поэтому применяются более сложные свои схемы, основанные на опыте автора-алготрейдера.
Все эти действия совершаются только ради одного - адекватной настройки стратегии. Какой бы совершенной не была схема, все равно одинаковые боевые роботы на разных счетах одного и того же ECN/STP брокера покажут расхождения. И помимо поиска рыночных закономерностей, важной задачей для алготрейдера также является уменьшение этих расхождений. Как уже говорилось выше, чем ближе брокер к возможстям HFT, тем меньше расхождения.
Если вникнуть в написанное, должно прийти понимание, что результаты работы стратегии на реале являются также своего рода тестером. И выводы на основании этой торговли также должны быть вероятностными.
// Тестовый советник для тестирования обученных в GPU-оптимизаторе нейросеток (или записи значений котировок/индикаторов для отправки исходных данных в тот же оптимизатор).
voidOnTick()
{
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 // Если режим записи
..............
ZS.这有点小,那么我们为什么不做一个更全球性的呢?
好吧,小家伙(一般而言)如何填补前四名中的这些空白。一切都在 DLL 中吗? :)
没有 DLL,纯 MCL + winepi 用于事件处理。
关于这一点,我们需要找时间把所有的东西都描述的很漂亮,写一篇很棒的文章。我可以为 MT4 提供一个示例或可视化伪类的实现,但如果没有详细描述,恐怕很难消化。与 JS 类比为 MT 创建 DOM(数据对象模块)的本质——无论如何它们都非常相似。对于种子 - 可以说是心脏的主要功能:
有具体报价吗?
有,而且任务还活着,但我不敢在这里发音,我可以在个人中。
现在,没有一个正常的程序员会画流程图。这些都是理论上的废话,旨在教给学童,但在实际项目中却无法发挥作用。
没有DLL,纯MCL+winapi进行事件处理。
关于这一点,我需要找到时间来很好地描述一切,并做一篇大文章。我可以抛出MT4的可视化伪币的例子或实现,但如果没有详细描述,恐怕很难消化。其本质是通过与JS类比,为MT创建DOM(数据对象模块)--它们真的很相似。对于一个引子--可以说是心脏的主要功能。
(是的,带着秋千。))
DOM - 这是一个很大的问题。 至少给我几个屏幕截图...或者(如果有的话)一些独立的编译的例子,在终端感受一下。有吗?
(笑...)随着一声巨响。))
DOM - 这是一个很大的问题。 至少给我几个屏幕截图...或者(如果有的话)一些独立的编译的例子,在终端感受一下。有吗?
我们要不要试一试?
没有什么。
1.小组就在尾部。战略是主要的,如果它不工作,小组就没有意义,没有用处。
2.交易部分的实施取决于策略,所以在暴击假设策略的框架下,没有什么可讨论的。战略的实施,奇怪的是,也取决于战略:)
3.立即做一个触发器来禁用交易区块中所占的策略。并禁止下新的订单。
4.小组。小组是什么--一个常规。
至于TS的写作,情况是这样的。
关于交易、自动交易系统和交易策略测试的论坛
关于MT5的高频交易的讨论
hrenfx, 2013.02.06 14:30
Простой и довольно эффективной логикой написания боевого робота является следующая схема:
- робот делится на две части: тестер и синхронизатор.
- тестер на основании ранней истории и только что пришедшей выдает текущее состоянии торговой стратегии.
- синхронизатор "переносит" текущие тестерные открытые позиции и приказы на реал.
Это чем-то напиминает копирование торговых сигналов с одного счета на другой. Только вместо примитивного копировщика работает грамотный синхронизатор.
К сожалению, правильную логику синхронизатора посмотреть где-либо практически невозможно, поэтому озадачевшемуся придется подумать самому - очень полезно.
Но и такая логика построения боевого-робота далеко не совершенна, т.к. встает дилема первичности курицы и яйца. Поэтому применяются более сложные свои схемы, основанные на опыте автора-алготрейдера.
Все эти действия совершаются только ради одного - адекватной настройки стратегии. Какой бы совершенной не была схема, все равно одинаковые боевые роботы на разных счетах одного и того же ECN/STP брокера покажут расхождения. И помимо поиска рыночных закономерностей, важной задачей для алготрейдера также является уменьшение этих расхождений. Как уже говорилось выше, чем ближе брокер к возможстям HFT, тем меньше расхождения.
Если вникнуть в написанное, должно прийти понимание, что результаты работы стратегии на реале являются также своего рода тестером. И выводы на основании этой торговли также должны быть вероятностными.
没有什么。
1.面板直达尾部。战略是主要的,如果它不深耕细作,面板就毫无意义,毫无用处。
2.交易部分的实施取决于策略,所以在假设策略攻击的框架下没有什么可讨论的。战略的实施很奇怪,也取决于战略:)
3.立即做一个触发器来禁用交易区块中所占的策略。并禁止下新的订单。
4.小组。好一个小组--一个例行公事。
好吧,在这里我们一下子有了可以争论的东西。:))
不是为了争论,让我们说,而是为了指出各种可能性。
1.战略是首要的,如果它不能继续前进,面板就毫无意义,没有用处。
目前,我同意,但有一个注意事项:该程序应立即面向两种模式工作,因此应立即规定策略/交易部分,考虑到有/无来自面板的控制和有/无面板上的信息显示。
整个交易部分写在一个类(CMarketDriver)中,它完全实现了下单、仓位跟踪、重新报价和其他与交易有关的东西。对于所有的符号都是一次性的。策略部分只是接收符号的推荐市场头寸:即填写格式为{string Instrument; double Position}的结构数组,并请求与服务器同步:MD.Synchronize(PositionArray)。 这就是全部。目前,它只用市场订单进行交易,但用点差内设置的限额进行交易(以减少交易成本)的版本即将推出。对于交易止盈/止损不使用,但MarketDriver可以在与服务器长时间失去连接的情况下设置保护性止损(止损参数在驱动设置中指定一次)。 顺便说一下,非常成功,几乎没有问题的结构化解决方案。 在测试器中测试战略思想--交易没有问题,所有注意力都可以投入到战略中--所有交易早已调试完毕并封装在交易驱动中。
2.............,所以在假想的战略攻击框架内没有什么可讨论的。战略的实施奇怪的是,也取决于战略的实施 :)
例如,我有一个新的想法--在一对雨刷的交叉点上进行交易。 在这种情况下,问题在于重组程序,以便在开发时(例如增加第三个雨刷),我将不必改变大部分代码。然后,程序可能会向多货币方向发展(为了项目的简单性,让我们假设符号交易是严格独立的,不考虑相互关系)。 如何组织战略部分,预测这种发展?
3.立即设置触发器,使交易区块中考虑的策略失效。并禁用新的下单功能。
但我们没有必要这样做,毕竟我们不指望在这里有什么麻烦。
4.小组。嗯,小组是个苦差事。
但是,组织战略的事件驱动与小组的联系是一个相当有创造性的任务,特别是如果我们试图为这样的小组开发一个或多或少的通用模板,可以很容易地适应不同的专家顾问,并随着项目的成长/发展而容易开发。
你不必如此,这几乎从不取决于我。
对我来说,这几乎总是取决于。特别是在与ECN合作时。我的意思是,一切当然不是在最底层完成的,而只是通过标准交易功能 的外壳。
对我来说,这几乎总是取决于。特别是在与ECN合作时。我的意思是,一切当然不是在最底层完成的,而只是通过标准交易功能 的外壳。
我不知道我和ECN的关系将如何发展(我将在RoboForex开一个账户),但我将尽力保持这种结构性脱钩(策略/市场驱动)。 它是如此方便,以至于我甚至准备好接受一些适度的交易成本(如利润损失)。
看看EA的主循环最后看起来多么简单。
看看简化的测试版,看看你是否喜欢这个方案。 如果有的话,根据你的需要进行微调,并将其用于你的优势。