Por fin llegamos al segundo capítulo, con un recorrido por el capítulo anterior, donde deberíamos tener una cierta comprensión de las funciones de la cuantificación de los inventores.
Suponiendo que el recorrido por el primer capítulo haya añadido a los custodios, a las bolsas, por supuesto, podemos probar el código con el inventor de cuantificación de simulaciones.
Lo primero que vamos a hacer es crear una estrategia que llamemos prueba 1.
Interfaz de edición de estrategias
El código es el siguiente:
function main() {
Log(exchange.GetAccount()); // 看过API 文档后知道, exchange就是交易所对象,实际上策略有个全局变量
// exchanges 数组,这个数组存放的就是你创建机器人或者回测时添加的交易所(可以是多个)
// 添加1个交易所 exchanges 数组就只包含1个交易所对象,即添加的交易所对象。
// 那么 exchange 和 exchanges 是什么关系呢? 其实 exchange 就是 exchanges[0] ,
// exchange 就是 exchanges 数组的第一个元素(这里这个元素是交易所对象)。
// Log()函数应该也不陌生吧,这个API 就是输出一条日志,日志内容就是Log括号里面的参数。
}
Crear un robot, también llamado Test1 Binding, es una estrategia conocida como Test1Binding, cuantificada por el inventor.
La política se ejecuta instantáneamente y muestra una información de cuenta.
En la imagen de la pantalla, se muestra que vamos a comparar la información de la cuenta con la del disco de simulación.
function main() {
Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
//下面我们来试试 不停的获取行情数据。
while(true){ // 这里用一个无限循环的结构来不停的获取 交易所行情数据。
Log("行情数据:", exchange.GetTicker()); // 哇! Log() 函数的括号里面可以写2个参数,第一个参数是: "行情数据:"
// 第二个参数是 exchange.GetTicker() 这个函数的返回值。就是主交易所的行情数据。
// 注意 Log() 函数的参数要用 逗号分隔。
Sleep(1000); // 咦~ 这个又是什么? 答:机器人程序 执行循环也需要休息!它可是执行很快的哦!(一秒N次)
// Sleep 函数的作用就是让程序暂停一会儿,括号里面的参数 1000 是 毫秒数, 1秒 = 1000毫秒。Sleep(1000);就是暂停1000毫秒。
// 不要小看这个参数,这个参数控制了程序的轮询频率,间接影响访问 交易所API 的频率,有些交易所API访问过于频繁可是会拒绝访问的。
}
}
Nota: No se puede ver.Algunos estudiantes pueden encontrar que los precios máximos y mínimos de los datos obtenidos por la función GetTicker son muy diferentes, es decir, que los precios máximos y mínimos de los datos de mercado que GetTicker devuelve son los precios máximos y mínimos dentro del ciclo acordado por la bolsa, según la configuración de la bolsa.
GetRecords(Period) 返回一个K线历史, K线周期在创建机器人时指定, Record数组结构
不加参数, 默认返回添加机器人时时指量的K线周期, 但也可以自定义K线周期
支持: PERIOD_M1 指1分钟, PERIOD_M5 指5分钟, PERIOD_M15 指15分钟, PERIOD_M30 指30分钟, PERIOD_H1 指1小时, PERIOD_D1 指一天
Escribe un código para probar y obtener datos de la línea K del ciclo predeterminado (de 5 minutos).
function main() {
Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
//下面我们来试试 不停的获取行情数据。
var records = exchanges[0].GetRecords(); // 按照默认周期获取K线数据
Log("records:", records); // 在日志中输出 获取到的K线数据。
}
Muestra el resultado:
Recordes:
[{
Como se puede ver, los registros de variables son una matriz estructural que se ordena en orden de tiempo de K líneas, desde lo lejano (index0) hasta lo cercano (indexrecords.length-1). Por cierto, vamos a entender la línea K: (algunos gráficos son rojos para el sol, verdes para la vagina, y algunos son de colores opuestos).A continuación se muestra un ejemplo de gráfico de K-line con ciclos de 5 minutos en la plataforma. No hay que olvidarlo.Una vez completado un ciclo de K líneas, su valor es determinado. En la práctica, llamamos var records = exchanges [0].GetRecords ((); el último elemento de la matriz de registros de datos devueltos, es decir: records [records.length - 1], cambia continuamente hasta que finaliza su ciclo. Incluso es posible que en el último segundo, el sol se transforme en una lente.
La función GetRecords devuelve datos de ciclo por defecto según la configuración de la política sin agregar parámetros. También se puede pasar parámetros para especificar ciclos de K líneas. Actualmente, el sistema de retrospección ya admite que GetRecords pase parámetros para especificar ciclos (sin agregar parámetros devuelve datos de ciclo por defecto), lo que permite que la política use diferentes ciclos al mismo tiempo para retrospectar.
function main() {
var depth = exchanges[0].GetDepth(); //获取市场深度信息, 返回订单薄信息,一个对象包含2个属性,每个属性是一个对象数组。
Log("depth:", depth); // 日志中输出,一下的输出是 整理过的格式,是方便读者理解,实际上是所有内容都在一行显示的。
}
La revisión del código anterior muestra lo siguiente:
depth:
{"Asks":[{"Price":4726.07,"Amount":15}, // 卖单数组,回测时,数据都是模拟出来的,所以Amount 都是 15,索引为0的是卖一,依次类推。
{"Price":4726.08,"Amount":15},
{"Price":4726.09,"Amount":15},
{"Price":4726.1,"Amount":15},
{"Price":4726.11,"Amount":15},
{"Price":4726.12,"Amount":15},
{"Price":4726.13,"Amount":15},
{"Price":4726.14,"Amount":15},
{"Price":4726.15,"Amount":15},
{"Price":4726.16,"Amount":15},
{"Price":4726.17,"Amount":15}],
"Bids":[{"Price":4726.05,"Amount":15}, // 买单数组,索引为0的是买一, 向后依次类推。
{"Price":4726.04,"Amount":15},
{"Price":4726.03,"Amount":15},
{"Price":4726.02,"Amount":15},
{"Price":4726.01,"Amount":15},
{"Price":4726,"Amount":15},
{"Price":4725.99,"Amount":15},
{"Price":4725.98,"Amount":15},
{"Price":4725.97,"Amount":15},
{"Price":4725.96,"Amount":15},
{"Price":4725.95,"Amount":15}]
}
El correspondiente depósito de órdenes es así (aquí están los datos reales de OKCoin). La información de profundidad del mercado en el proceso real (de depósito de órdenes) cambia rápidamente, los estudiantes interesados pueden registrarse en OKCoin y luego iniciar sesión para verlo.
¿Qué se puede hacer con la información de profundidad del mercado (datos de cuentas)? Los datos de cuentas tienen muchas aplicaciones, por ejemplo, para comer (por supuesto, también hay menús de cuentas).
function main() {
var depth = exchanges[0].GetDepth(); // 获取市场深度
Log("depth:", depth); // 日志输出显示
Log(exchanges[0].GetAccount()); // 输出 吃单前的 账户信息
var buyPrice = depth.Asks[0].Price; // 设置吃卖单的价格,即卖一,
// 有时为确保吃单成功,这样处理:var buyPrice = depth.Asks[0].Price + slidePrice;
var buyAmount = depth.Asks[0].Amount; // 吃卖单的量
exchanges[0].Buy(buyPrice, buyAmount); // 执行买入操作, 吃掉卖一 这个单子
Log(exchanges[0].GetAccount()); // 显示买入后的 账户信息,对比初始账户信息。可以对比出 买入操作的成交的数量。
}
Los resultados de la operación de un disco analógico cuantificado por el inventor:
el perro de vueloY el segundo descubrimiento del problema es que cuando elegí el administrador público de EE.UU., el bot no tenía ese símbolo de advertencia en la lista, pero cuando lo ejecuté, ya no había ninguna información en el registro, lo que indica que no había información de registro.
el perro de vueloComplementar el hallazgo del problema: en la lista de robots, el estado es el triángulo de color rojo con un signo de exclamación, como si fuera una señal de anomalía.
el perro de vueloHola, estoy probando la simulación con la plataforma, el primer paso es probar la información de la cuenta, no hay salida de registro, se sugiere un error, no sé dónde está el problema? El robot tiene un código de prueba: La función principal (() { Log ((exchange.GetAccount (())); Log (("test"); ¿Por qué no? El resultado: Prueba 1 Estrategia: Prueba 1 (última actualización del 2018-09-13 14:25:33) Fecha: Creado el 2018-09-13 14:07:57 Recientemente comenzado el 2018-09-13 14:40:24 Parado el 2018-09-13 14:40:25 Estado: K línea de ciclo 1 minuto de error. Alojado en China: 42.236.82.38 - linux/amd64 (public), ID: 118025 La plataforma de negociación: BotVS/BTC_USD
el perro de vueloHola, estoy probando la simulación con la plataforma, el primer paso es probar la información de la cuenta, no hay salida de registro, se sugiere un error, no sé dónde está el problema? El robot tiene un código de prueba: La función principal (() { Log ((exchange.GetAccount (())); Log (("test"); ¿Por qué no? El resultado: Prueba 1 Estrategia: Prueba 1 (última actualización del 2018-09-13 14:25:33) Fecha: Creado el 2018-09-13 14:07:57 Recientemente comenzado el 2018-09-13 14:40:24 Parado el 2018-09-13 14:40:25 Estado: K línea de ciclo 1 minuto de error. Alojado en China: 42.236.82.38 - linux/amd64 (public), ID: 118025 La plataforma de negociación: BotVS/BTC_USD
Hokshelato tambiénEn la simulación se llama `exchange.GetTicker()`, y a menudo aparece **GetTicker: timeout**, ¿por qué?
¿Qué quieres decir?Hola, ¿los datos de simulación de disco real son los datos de disco real de esa bolsa?
¿Qué es eso?¿Qué es eso?
ShandyanliyuPor favor, exchange.GetDepth (()) ¿devuelve toda la información de los pedidos en el intercambio actual? ¿Será porque hay demasiados pedidos en el intercambio y solo devuelve parte de la información?
el maohbaoGetRecords (Periodo) devuelve una historia de línea K, pero ¿cuántas barras de línea K contiene esta historia de línea K, y dónde se especifica?
el pingüinoBueno, me equivoqué de clave, lo he corregido.
el pingüinoGetAccount: no coinciden las firmas ¿Cómo lo haces, Moncho?
Andy2simples¿Por qué la cantidad de profundidad del disco analógico es siempre 15? ¿El disco analógico es la cantidad de datos pasados o la cantidad de datos generados al azar?
Cjz140Record es una función, ¿qué es la longitud? ¿Qué es la profundidad? ¿Qué diferencia hay entre objetos y funciones?
¿ Qué haces?¿Qué es el slidePrice?
Los inventores cuantifican - sueños pequeñosSi tienes alguna pregunta, puedes añadirla al grupo oficial de QQ @administrador
el perro de vueloGracias por las muchas respuestas, he seguido las indicaciones y lo intentaré de nuevo.
Los inventores cuantifican - sueños pequeñosNo sé si es un problema de hosts públicos, puedes probar con hosts privados, los hosts privados deberían ser posibles, puedes implementar uno en tu propia computadora.
Los inventores cuantifican - sueños pequeñosSi no lo haces, puedes intentarlo con tu propio administrador privado.
Los inventores cuantifican - sueños pequeñosEsto puede ser específico para ver qué tipo de lógica de ejecución tiene la política, o puede ser que la política funcione correctamente, pero no desencadene ninguna operación.
Los inventores cuantifican - sueños pequeñosSi el robot está en marcha, se requiere revisar el registro del robot o la información del registro del administrador.
Los inventores cuantifican - sueños pequeñosLos problemas recientes de la red, además de que el modo de obtención del modo puede ajustarse con el uso de exchange.IO ("mode") cuando el modo de obtención del modo no se actualiza en el disco analógico.
Los inventores cuantifican - sueños pequeñosEl simulador es un simulador que funciona las 24 horas y sigue el mercado de varias bolsas principales. Todos los usuarios que usan el simulador son participantes de este simulador. El mercado no coincide completamente con el mercado de referencia, pero probablemente la tendencia es la misma.
ShandyanliyuEstá bien, ahora lo entiendo, gracias.
Los inventores cuantifican - sueños pequeñosLos datos reales de las compras y ventas son los datos reales.
ShandyanliyuMuchas gracias. Además, por favor pregunte, cuando la simulación de nivel de disco real de la simulación de retrospección, exchange.GetDepth (()) devuelve datos compatibles con BotVS o datos históricos reales?
Los inventores cuantifican - sueños pequeñosLos archivos devueltos Vea cuánto en concreto ofrece la interfaz de la API de los intercambios, algunos intercambios devuelven más y algunos menos, y algunos intercambios admiten interfaces de integración profunda, algunos no lo hacen. BotVS está embalado con datos de devolución por defecto, si desea llamarlos directamente, puede usar la función exchange.IO para establecer los parámetros.
Los inventores cuantifican - sueños pequeñosEste no puede especificar, cuántos K de línea de retorno son el intercambio específico de empuje, cada intercambio puede tener una cantidad diferente de empuje, otros intercambios no ofrecen la interfaz de K de línea, el administrador recopila el registro de transacción del intercambio, generando K de línea, que es acumulado desde la primera raíz.
Los inventores cuantifican - sueños pequeños¡Al principio también me equivoqué!
Los inventores cuantifican - sueños pequeñosBueno, si lo consideramos, hay dos puntos principales en esto: - 1, la cantidad de datos en profundidad es tan grande, cambia a cada segundo, y cambia a una velocidad tan rápida, que lo que vemos en realidad es solo un trozo de datos. - 2, incluso si se realizan datos reales de profundidad, no se puede simular con precisión un entorno de orden de poca profundidad, ya que en este momento los participantes en la retrospección son solo nosotros mismos y no hay otros participantes; de hecho, no es muy diferente de los sistemas de retrospección actuales. Sin embargo, vamos a considerar la posibilidad de optimizar lo más cerca posible de la realidad, gracias por la sugerencia ^^
Andy2simplesLos datos profundos aún no han ocurrido, las curvas de precios han ocurrido en el pasado. Los individuos creen que los datos pasados y futuros juntos son más confiables para juzgar las compras y ventas actuales. Se recomienda encarecidamente registrar los datos profundos también.
Los inventores cuantifican - sueños pequeñosLos datos de profundidad son muy grandes. Si todos los registros se registran, habrá muchos más. Por lo tanto, los datos de profundidad, excepto el primer grado, son valores analógicos.
Los inventores cuantifican - sueños pequeñosLos registros son una variable que recibe los datos de K que devuelve la función API GetRecords, la longitud es una propiedad de longitud de una variable de tipo aritmético en el lenguaje JS, que representa la longitud de la matriz (es decir, el número de elementos en ella), y los registros similares a la profundidad son también una variable que recibe los datos de profundidad devueltos por la función GetDepth, los registros, profundidad, ticker. La estructura de datos se puede encontrar en la documentación API.
Los inventores cuantifican - sueños pequeñosEl precio de venta, traducido un poco sincero, es para comer un poco más y un poco más de precio, más fácil de negociar.