Jugar JavaScript con el viejo blanco - Crear un compañero que haga compras y ventas

El autor:Un sueño pequeño., Creado: 2017-03-06 09:57:41, Actualizado: 2017-10-11 10:36:41

Jugar con el viejo blanco con JavaScript para crear un compañero que haga compras y ventas.

La vida aburrida de los granjeros en la parte delantera

¿Puede el mundo del código aburrido tener una fuente de limpieza? ¿Puede la vida monótona tener un poco de aire fresco? ¿La juventud inquieta volverá a inquietarse? Estos deben ser los sentimientos comunes de los programadores.

  • Descubrimiento

    El viejo blanco como un tardío agricultor de jardinería, antes de ir a la escuela, no tenía problemas con el trasero, jugar con futuros. Había un poco de concepto de comercio de valores, se puede pensar que yo estaba en el mercado de futuros, para ser un programador. También era bueno cuando estaba en la universidad para aprender C, C ++ lenguaje de programación sin faltar a clases, que son útiles para mi edad joven para dominar rápidamente JavaScript.

    Después de una búsqueda, encontré que JS, Python, C / C ++, JAVA, etc. pueden hacer transacciones programadas (JS solo usa muchos puntos, Python se está aprendiendo a sí mismo), hay mucho que aprender.

    Un programa robótico recientemente estudiado es un programa de trading de mercado de futuros de commodities que es bastante conocido en el extranjero y que lleva ideas para jugar en el mercado de commodities en el país.

    img

    img

    Cuando empecé a escribir con JavaScript, me sentí completamente impotente, esto y el código de escritura en el extremo anterior de JS es una sensación completamente diferente, por un tiempo el cerebro no se adapta, antes de ver las líneas de color verde, columnas y columnas en el software de acciones, nunca se consideró cómo se calculaban.

    También hay algunos que pueden ser útiles de referencia. Por ejemplo, el indicador STOCH RSI, que no tiene mucha información en línea, es necesario revisarlo por sí mismo.

    Lo que se escribe en blanco y viejo es LOW, no se preocupe.

function LLV(array,period){
    if(!array || array.length - period < 0){
        throw "error:" + array;
    }
    var min = array[array.length - period];
    for(var i = array.length - period; i < array.length; i++){
        if( array[i] < min ){
            min = array[i];
        }
    }
    return min;
}

function HHV(array,period){
    if(!array || array.length - period < 0){
        throw "error:" + array;
    }
    var max = array[array.length - period];
    for(var i = array.length - period; i < array.length; i++){
        if( array[i] > max){
            max = array[i];
        }
    }
    return max;
}

function DeleteNullEle(initArr){
    var dealArr = [];
    var initArrLen = initArr.length;
    for(var i = 0,j = 0 ; i < initArrLen ; i++,j++){
        if(initArr[i] === null || isNaN(initArr[i]) ){
            j--;
            continue;
        }
        dealArr[j] = initArr[i];
    }
    return dealArr;
}

/*
LC := REF(CLOSE,1); //REF(C,1) 上一周期的收盘价
RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1) *100;
%K:     MA(RSI-LLV(RSI,M),P1)/MA(HHV(RSI,M)-LLV(RSI,M),P1)*100;  LLV(l,60)表示:检索60天内的最低价,可适应于检索任何股票
%D:MA(%K,P2);

LC := REF(CLOSE,1);
RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1) *100;
STOCHRSI:MA(RSI-LLV(RSI,M),P1)/MA(HHV(RSI,M)-LLV(RSI,M),P1)*100;
*/
function FstochRSI(records,n,m,p1,p2){
    var len = records.length;
    //var LC = records[len-2];//上一周期收盘价
    //var rsi = TA.RSI(records,n);// RSI 数组   ,talib
    var rsi = talib.RSI(records,n);
    rsi = DeleteNullEle(rsi);//ceshi

    var arr1 = [];
    var arr2 = [];
    var arr3 = [];
    var arr4 = [];
    var rsi_a = [];
    var rsi_b = [];
    var k = [];
    var d = null;

    /*不包含当前柱
    for(var a = 0 ;a < rsi.length ; a++ ){//改造 不用 LLV
        for(var aa = 0 ; aa <= a; aa++ ){
            rsi_a.push(rsi[aa]);
        }
        arr1.push(rsi[a] - TA.Lowest(rsi_a,m));
    }
    for(var b = 0 ;b < rsi.length ; b++ ){//改造 不用 HHV
        for(var bb = 0 ; bb <= b; bb++ ){
            rsi_b.push(rsi[bb]);
        }
        arr2.push(TA.Highest(rsi_b,m) - TA.Lowest(rsi_b,m));
    }
    */
    for(var a = 0 ;a < rsi.length ; a++ ){//改造 不用 LLV
        if(a < m){
            continue;
        }
        for(var aa = 0 ; aa <= a; aa++ ){
            rsi_a.push(rsi[aa]);
        }
        arr1.push(rsi[a] - LLV(rsi_a,m));
    }
    for(var b = 0 ;b < rsi.length ; b++ ){//改造 不用 HHV
        if(b < m){
            continue;
        }
        for(var bb = 0 ; bb <= b; bb++ ){
            rsi_b.push(rsi[bb]);
        }
        arr2.push(HHV(rsi_b,m) - LLV(rsi_b,m));
    }

    arr1 = DeleteNullEle(arr1);
    arr2 = DeleteNullEle(arr2);
    //Log("arr1:",arr1.length,"-",arr1);//ceshi
    //Log("arr2:",arr2.length,"-",arr2);//ceshi

    arr3 = talib.MA(arr1,p1);
    arr4 = talib.MA(arr2,p1);

    arr3 = DeleteNullEle(arr3);
    arr4 = DeleteNullEle(arr4);

    //Log("ceshi");//ceshi
    var c = 0;
    var diff = 0;
    if(arr3.length !== arr4.length){//实测 长度不相等
        throw "error: !=" + arr3.length + "----" + arr4.length;
        diff = arr4.length - arr3.length; //example   diff  =   10  -   6
    }else{
        //throw "error:" + arr3.length + "----" + arr4.length;
    }

    for( ;c < arr3.length ; c++ ){
        k.push(arr3[c] / arr4[c + diff] * 100);
    }

    d = talib.MA(k,p2);

    return [k,d,rsi];
}

El dibujo de la computadora es así...

img

Escriba aquí hoy y nos veremos en la próxima.https://www.fmz.com/bbs-topic/723

Programador littleDream, originalmente


Más.

poco315¡Las vacas!