При поиске различных материалов в Интернете вы обнаружите, что компьютерная программа для торговли финансовыми ценными бумагами называется программированная торговля, количественная торговля. Старый уровень математики также на специализированном уровне, а статистика имеет только несколько основных понятий: нормальное распределение, ожидания, сочетание и т. д. Не смей говорить, что ты количественный больше всего в обучении программированию, количественному обучению, в процессе обучения программированию, количественному обучению или практике.
По мнению старейшины, полезная песочница должна иметь следующие элементы:
1, максимально имитировать реальные временные последовательности, то есть, когда программа работает в песочнице, временные последовательности должны быть как можно ближе к реальным условиям, основываясь на уровне тика, чтобы результаты тестирования имели значение. Это может привести к ограничению скорости работы программы в песочнице.
2, различные параметры опционального контроля, который требуется не параметры тестируемой программы, а параметры системы песочницы. Например: настройки биржи (фьючерсы? акции A? валюты?), информация о модном счете тестируемой биржи, процедурные сборы биржи, вероятный уровень скольжения, контроль временного диапазона и т. д.
3, настройка параметров программы: иногда у старого человека есть куча запасных параметров, чтобы попробовать, какой из них лучше. Хорошая песочница может принять кучу параметров, которые были заранее настроены, а затем сама будет работать, анализировать результаты и показывать лучшие.
4, ошибочность тестирования: при выполнении моделирования программы часто ветер идет гладко, и волны тихие, потому что они находятся в водоеме (насколько большие волны могут быть?), а на самом деле в непредвиденном глубоком океане, и всевозможные неизвестные штормы появляются в любое время. Тогда система песочницы должна автоматически создавать в водоеме несколько больших волн ветра, чтобы максимально имитировать плохую среду.
5. Графики показывают: Графики могут записывать много полезных данных для анализа, таких как графики прибыли, кривые разницы цен и т. д.
1. Общая структура автоматизированных программ CTP для товарных фьючерсов
Функция, используемая в нижнем слое, уже встроена.exchange.IO("status")
Для того, чтобы определить, подключен ли он к первичному серверу фьючерсной компании.
Ответ:
Коммерческие фьючерсы используют протокол CTP, структура соединения: терминальные программы клиентов фьючерсных компаний ((старый белый код)------> предварительные серверы фьючерсных компаний-------> серверы бирж
Возвращаясь к основному вопросу, когда товарные фьючерсы не торгуются, это невозможность подключения к переднему серверу фьючерсной компании ("преднему серверу фьючерсной компании после определенного времени закрывается").
function MainLoop(){ // 处理具体工作的函数
// 编写处理具体交易逻辑
}
function main() {
var status = null;
while(true){
status = exchange.IO("status"); // 调用API 确定连接状态
if(status === true){ // 判断状态
LogStatus("已连接!"); // 在回测或者实际运行中显示一些实时数据、信息。
MainLoop(); // 连接上 交易所服务器后,执行主要工作函数。
}else{ // 如果没有连接上 即 exchange.IO("status") 函数返回 false
LogStatus("未连接状态!"); // 显示 未连接状态。
}
Sleep(1000); // 封装的睡眠函数,参数是毫秒,1000毫秒 等于 1秒,需要有轮询间隔, 以免访问过于频繁。CTP协议是每秒推送2次数据。
}
}
Побегите в песочницу:
Как получить информацию о своем аккаунте в программе, поскольку она упакована в нижний слой и сделана функцией?exchange.GetAccount()
Попробуйте попробовать эту простую фразу.
function MainLoop(){ // 处理具体工作的函数
exchange.GetAccount();
}
И я не могу сказать, что это так.MainLoop()
Запишите в функциюexchange.GetAccount();
Результат ничего не показывает. Log()
, параметры функций - это для вывода различных переменных, можно передать несколько с помощью запятой интервал.( При написании кода, кроме строки в ней можно вводить в китайском языке, остальное написание кода, обязательно помните переключаться на английский язык, старик выбросил эту яму, тратить много времени, чтобы обнаружить, что в китайском языке вводить символы.
function MainLoop(){ // 处理具体工作的函数
Log(exchange.GetAccount()); // 写法1
var Account = exchange.GetAccount(); // 写法2
}
Затем в песочнице запросить некоторые другие данные, лоубейн раньше часто обращают внимание на шнуровой сталь товарный фьючерсный сорт, потому что в то же время обращает внимание на цены на недвижимость.
Первое, что нужно знать, чтобы понять, какой рынок, например, о контрактах на 1705 штрих-сталь. Ну, этот контракт на бирже кодируется: rb1705 (знание фьючерсов я тоже сам наполняю мозг Baidu), используйтеexchange.SetContractType("rb1705")
Кроме того, я хотел бы знать, в каком положении в данный момент находится этот договор rb1705 (то есть момент времени в системе рецензирования, когда он работает).exchange.GetTicker()
Далее я хочу узнать историческую циклическую статистику цены на этот контракт.exchange.GetRecords()
СделайтеMainLoop
Функция изменяется:
var index = 0; // 声明一个全局变量 用来记录循环次数
function MainLoop(){
var ContractInfo = exchange.SetContractType("rb1705"); // 设置我要操作的 商品期货合约类型 即 螺纹钢1705合约。
if(!ContractInfo){
return; // 如果设置合约没有成功,即返回函数,再次进入重试。
}
Log("rb1705 Info:", ContractInfo); // 显示一下合约详细信息。
var ticker = exchange.GetTicker(); // 通过CTP协议请求 此刻行情数据
var records = exchange.GetRecords(); // 通过CTP协议请求 历史K线数据,K线的周期默认周期是在沙盒系统上设置的。
Log("ticker:", ticker); // 打印出来 此刻行情数据
Log("records:", records); // 打印出来 历史K线数据
Log("index:", index++, "#FF0000"); // 打印循环次数, 在最后参数传入 "#FF0000" 可以使打印的日志显示为红色。
}
Выбор части records значения переменных ((тип матрицы):
[
{
Значение тикера (объекта):
{
Информация о договоре rb1705: ((Вы можете посмотреть описание полей в протоколе CTP.))
{c:$a
Смесь: 0,
Смотрите на страницу "Создание даты":
Оригинальное название:
В этом году он вышел на экраны впервые.
Оригинальное название:
Ссылка на сайт: http://www.exchangeid.ru
Оригинальное название: Rb1705
"Отправляйтесь в "Открытие"
ИнстаЛайфФазе:
Имеется в виду, что в этом случае вы можете использовать только один из этих инструментов.
Название инструмента: rb1705
В этом случае вы должны быть готовы.
Относительно высокий показатель Long Margin Ratio: 0.06,
MaxLimitOrderVolume Max: 500
Обычно это происходит из-за того, что мы не знаем, что делать.
Оригинальное название:
Оригинальное название:
Оригинальное название: MinMarketOrder
Оригинальное название: OpenDate
Оптимизация
Наконец, мы запустили роботов, которые работают в песочнице.
Здесь представлена концепция товарного фьючерса, в котором контракт на покупку многопозиционного контракта (контракт на взгляд) или контракт на покупку пустого хранения (контракт на падение) называется открытым, чтобы различить: контракт на покупку многопозиционного контракта называется открытым, контракт на покупку пустого хранения называется открытым.
Планшеты - это действия фьючерсных трейдеров, которые покупают или продают фьючерсные контракты того же сорта, количества и месяца, но в противоположном направлении. Фьючерсные трейдеры выбирают продать купленные фьючерсные контракты до окончания последнего торгового дня или выкупить проданные фьючерсные контракты, чтобы получить равную сумму. Фьючерсная торговля в противоположном направлении обанкрощает первоначальный фьючерсный контракт, тем самым заканчивая торговлю фьючерсом и освобождая от обязательств по осуществлению физических сделок по истечении срока. ``
##### 所以在期货市场做买卖就有4个方向:
用 ```SetDirection()``` 函数来 确定操作的方向
- 开多仓:SetDirection("buy") ,传入参数 "buy" 字符串,明确 exchange.Buy() 函数为 开多仓 操作, Buy 函数稍后讲到。
- 开空仓:SetDirection("sell"), 传入参数 "sell" 字符串,明确 exchange.Sell() 函数为 开空仓 操作,Sell 函数稍后讲到。
- 平多仓:SetDirection("closebuy"), 传入参数 "closebuy" 字符串, 明确 exchange.Sell()函数为 平多仓操作。
- 平空仓:SetDirection("closesell"), 传入参数 "closesell" 字符串,明确 exchange.Buy()函数为 平空仓操作。
下个单试试!继续改写 MainLoop 函数,我们让程序在沙盒里面每隔10分钟 交易一次,开多仓平多仓交替进行。
```
var index = 0;
var isFirst = true;
function MainLoop(){
if(isFirst){
Log(exchange.GetAccount());
isFirst = false;
}
var ContractInfo = exchange.SetContractType("rb1705");
if(!ContractInfo){
return; // 如果设置合约没有成功,即返回函数,再次进入重试。
}
var ticker = exchange.GetTicker();
if(index % 2 === 0){
exchange.SetDirection("buy");
exchange.Buy(ticker.Last + 1, 1, ticker); // exchange.Buy 函数有2个必要参数,第一个参数为下单价格,
// 第二个参数为下单数量(希望交易的数量),之后还可以跟一些参数输出在日志信息。
//ticker.Last + 1 是为了让单子能成交,意思是在最后成交价的基础上多出1块钱。
}else if(index % 2 === 1){
exchange.SetDirection("closebuy");
exchange.Sell(ticker.Last - 1, 1, ticker); // ticker.Last - 1 是为了在最后成交价的基础上减去1元 卖出。
}
index++;
Sleep(1000 * 60 * 10 - 1000); // 这里暂停10分钟 ,减去的1000 即1秒是 main 函数循环中的1秒。
Log(exchange.GetAccount());
}
```
![img](/upload/asset/bd6dd2ef0e5db88c70f0585aee3a417c92227d31.png)
##### 开始的账户信息 和 最后一次开仓 前的账户信息比较,可见不能胡乱开仓平仓。 >_<
https://www.fmz.com/bbs-topic/724