bybit swap estrategia de habilitación permanente

El autor:Gulishiduan_ ordenado en alta frecuencia, Fecha: 2020-05-07 22:20:01
Las etiquetas:

// Recientemente un amigo reaccionó con un pequeño bug, primero prueba la red. Los parámetros se pueden ajustar libremente según sea necesario. La esencia de la estrategia es seguir el precio de descuento de la línea k para determinar cuántos espacios vacíos hay, en pocas palabras, mediante el giro de la línea media, detección de señales en tiempo real. // para registrar una nueva cuenta, bienvenido a usar mi conexión de registro:https://www.bytick.com/zh-CN/register/?affiliate_id=7586&language=en&group_id=0&group_type=2// Este enlace ofrece una serie de estrategias para conectar a terceros.// // Principio básico: si la línea k continúa subiendo, continúa aumentando hasta el máximo posicionamiento.//

// Si es largo: no es adecuado para el mercado de vacíos, pero no aumenta continuamente las posiciones durante la caída.// // Si es corto: no es adecuado para el mercado de multinivel, pero no aumenta continuamente en el alza.

// Tenga en cuenta que el espacio adicional también puede abrir dos cuentas a la vez.

// Otras estrategias para comprar por favor consulte: weixin:ying5737 // Necesita su propio intercambio de pareja./ Prueba previa de cuentas simuladas.

// el nivel de la luz del día, o el nivel de la línea de circunferencia, que usamos como ejemplo de la luz del día. // Detección de ma5ma10, el precio de cierre de la línea k está por encima de ma5, ma10 y ma5 está en la línea alta (sentido como el precio de cierre de la línea k de ayer > el precio de cierre de la línea k de la 5a base del número anterior), se abre un pedido de suspensión o compra directa de 500u todos los días, continúa en la línea alta, continúa aumentando la posición. // Aumento de la posición, si aparecen dos líneas de menstruación en la cavidad superior, entonces el tercer día compra 500 u aumento de la posición. Cada dos líneas de menstruación estadísticas por separado.

// Se vende, k línea de tres cadenas de aluminio reducción de almacenamiento de 1000 u.;; ((o k línea de cuatro cadenas de aluminio reducción de almacenamiento de 2000 u) - ¿Por qué no lo haces? // Estrategia en funcionamiento, 13 días ((o 21 días), paralización automática, liquidación o liquidación de posiciones y pedidos. // El máximo de tenencia de 5000 u más grande que la posición sólo disminuye la posición.

En la parte superior:

https://wx1.sinaimg.cn/mw1024/c5775633ly1gbsjvtrgnhj20m80dmmxy.jpg https://wx1.sinaimg.cn/mw1024/c5775633ly1gbsjvty48uj21hc0u077o.jpg https://wx2.sinaimg.cn/mw1024/c5775633ly1gbsjvu4iipj20lr0h775f.jpg

Estrategia de tendencia unilateral de la frecuencia media

Variables de monitoreo

  1. Es muy rápido.
  2. El movimiento lento
  3. Precio de cierre

Parámetros de configuración

  1. Solo una vez Amount
  2. Una sola reducción de cantidad CloseAmount
  3. Maximum de las posiciones

Hacer más

Requisitos

  1. El precio de cierre de la línea k es mayor que el MA rápido y el MA lento.
  2. y rápido MA arriba (Juzgar por el precio de cierre de la línea k de ayer es mayor que el precio de cierre k de la quinta línea anterior)

La lista de abajo

  1. El Sr. Liang, redujo el precio de compra de CloseAmount
  2. Dos líneas negativas, sumando Amount. Esto es, cuando aparecen dos líneas negativas, se reduce 2* Amount.
  3. Lo normal es abrir la cuentaAmount

Restricciones

  1. El máximo de tenencia mayor que MaxPosition no se abre.

Se retiran

  1. Retirarse después de ejecutar la línea N-K.

El vacío

Requisitos

  1. El precio de cierre de la línea k es menor que el MA rápido y el MA lento
  2. Y el MA rápido sube (Juzgar si el precio de cierre de la línea k de ayer es menor que el número anterior N (el ciclo de MA rápido) es el precio de cierre de la raíz k)

La lista de abajo

  1. Tres líneas negativas, reducción de almacenamiento CloseAmount
  2. Dos conexiones, sumando Amount. Es decir, que aparecen dos conexiones negativas que se ordenan 2 * Amount.
  3. Lo normal es abrir la cuentaAmount

Restricciones

  1. El máximo de tenencia mayor que MaxPosition no se abre.

Se retiran

  1. Retirarse después de ejecutar la línea N-K.

Cuidado

  1. El programa obtiene la información sobre el inventario de la cuenta cada vez que se utiliza la estrategia de almacenamiento.
  2. Por favor, enlace a fmz WeChat, el programa impulsará WeChat donde sea importante.

Parámetros

  1. Ciclo de medición rápida
  2. Ciclo de MA lento
  3. Intervalo de consulta (ms)
  4. Opciones de espacio
  5. Tamaño de la palanca: 0 indica el modo de todo el paquete
  6. Tipo de contrato: actualmente fmex solo admite swaps, solo puede rellenar swaps. Cuando se revisa, se puede revisa con OKEx, donde se puede establecer this_week, this_month, etc.
  7. Una sola reducción. Cuando se alcanza la condición de reducción, una reducción.
  8. Máximo almacenamiento (u)
  9. La dirección de base de la API. Puede ser configurada como https://api.fmex.com, o https://api.testnet.fmex.com
  10. Se retira después de ejecutar varias líneas de K.
  11. La estrategia es tomar la iniciativa de salir o no.
  12. Si se requiere interacción. La política se retira cuando se cumplen las condiciones de salida. Si se requiere interacción, se espera una orden de intervención artificial. Si no se requiere, el programa se retira directamente.
  13. Si se compra. Si se selecciona, el pedido es el precio del mercado. Si no se selecciona, el pedido está suspendido en el precio de compra.
  14. Número de líneas de K (por ejemplo, más tiempo, línea de sol continua) ; señales de disminución, como más tiempo, línea de sol continua, disminución de la posición
  15. Número de líneas de K (cuando se hace más, línea continua) ⇒ Número de líneas de K (cuando se hace más, línea continua)
  16. ¿Es el mercado conmocionante?

Interacción

La interacción sólo se produce en是否需要交互Cuando es válido La interacción se realiza cuando la estrategia está fuera de control.

  1. Continuar. Continuar es el restablecimiento de la política y volver a ejecutar los mismos parámetros.
  2. La estrategia para detener la salida
  3. La estrategia de cambio continúa después del mercado. El mercado de cambio continúa después de una conmoción o tendencia, es una expansión de la interacción 1


/*联系微信:ying5737(策略讨论,支持付费编写)
# 中频单边趋势策略
## 监测变量
1. 快MA
2. 慢MA
3. 收盘价
## 配置参数
1. 单次下单量Amount
2. 单次减仓量CloseAmount
3. 最大持仓量MaxPosition
## 做多
### 必要条件
1. k线收盘价大于快MA与慢MA
2. 且快MA上行(判断为昨日k线收盘价大于往前数第5根k收盘价)
### 下单
1. 三连阳,减仓CloseAmount
2. 两连阴,加仓Amount。也就是出现两连阴会下单2*Amount
3. 正常情况,开单Amount
### 限制
1. 最大持仓量大于MaxPosition则不开单
### 退出
1. 运行N根K线之后退出

## 做空
### 必要条件
1. k线收盘价小于快MA与慢MA
2. 且快MA下行(判断为昨日k线收盘价小于往前数第N(快MA5周期)根k收盘价)
### 下单
1. 三连阴,减仓CloseAmount
2. 两连阳,加仓Amount。也就是出现两连阴会下单2*Amount
3. 正常情况,开单Amount
### 限制
1. 最大持仓量大于MaxPosition则不开单
### 退出
1. 运行N根K线之后退出
## 注意事项
1. 程序会每次会获取账户的持仓信息做为策略的持仓量
2. 请绑定fmz微信,程序会重要的地方推送微信
## 参数
1. 快MA周期
2. 慢MA周期	
3. 轮询间隔(ms)	
4. 多空选择
5. 杠杆大小: 0表示全仓模式
6. 合约类型: 目前fmex只支持swap,只能填写swap。回测时可用OKEx回测,此处可设置为this_week, this_month等
7. 单次减仓量。达到减仓条件时,一次减仓量
8. 最大持仓(u)
9. API基地址。可设置为https://api.fmex.com,或测试网https://api.testnet.fmex.com
10. 策略K数退出. 策略运行多少个K线后正常退出
11. 策略主动退出时是否清仓。
12. 是否需要交互。策略在满足退出条件后,正常退出时。如果需要交互,则会等待人工干预等命令。如果不需要,则程序直接退出了
13. 是否吃单。勾选,则下单是市价单,不勾选,则是挂单,买单挂在买一,卖单挂在卖一
14. 连续阳(阴)K线数(做多时,连续阳线)。减仓信号,如做多时,连续阳线,减仓
15. 连续阴(阳)K线数(做多时,连续阴线)。连续阴(阳)K线数(做多时,连续阴线)	
16. 是否是震荡行情。勾选是震荡行情
## 交互
**交互只有在`是否需要交互`时有效**
**交互是在策略正常退出时进行交互**
1. 继续。继续是策略复位,重新运行相同的参数
2. 停止。策略停止退出
3. 切换策略行情后继续.切换行情为震荡或趋势后继续运行,是交互1'继续'的一种扩展
*/
////////////////// params ////////////////////////
//var fastMaPeriod = 5
//var slowMaPeriod = 10
//var direction = 做多|做空
//var interval = 1000
//var amount = 500
//var maxHoldAmount = 5000
//var closeAmount = 1000
//var runNBars = 13
//var marginLevel = 0
//var contractType = 'swap'
//var enableCommand = false
//var isTaker = true
//var maxOppositeDirKNum = 2
//var maxSameDirKNum = 3
//var isShock = false
////////////////// variable ////////////////////////

var makeLong = direction == 0 ? true:false
var startTime = null
var holdAmount = 0
var lastBar = null
var yinxianCnt = 0
var yangxianCnt = 0
var lastClose = 0
var last5thClose = 0
var fastMa = []
var slowMa = []
var barCnt = 0
var localIsShock = false
////////////////////////////////////////////////
var PreBarTime = 0
var isFirst = true

function PlotMA_Kline(records){
    $.PlotRecords(records, 'K')
    if(fastMa.length == 0) {
        fastMa = TA.MA(records, fastMaPeriod)
    }
    if(slowMa.length == 0) {
        slowMa = TA.MA(records, slowMaPeriod)
    }
    if(isFirst){
        $.PlotFlag(records[records.length - 1].Time, 'Start', 'STR')
        for(var i = records.length - 1; i >= 0; i--){
            if(fastMa[i] !== null){
                $.PlotLine('ma'+fastMaPeriod, fastMa[i], records[i].Time)
            }
            if(slowMa[i] !== null){
                $.PlotLine('ma'+slowMaPeriod, slowMa[i], records[i].Time)
            }
        }
        PreBarTime = records[records.length - 1].Time
        isFirst = false
    } else {
        if(PreBarTime !== records[records.length - 1].Time){
            $.PlotLine('ma'+fastMaPeriod, fastMa[fastMa.length - 2], records[fastMa.length - 2].Time)
            $.PlotLine('ma'+slowMaPeriod, slowMa[slowMa.length - 2], records[slowMa.length - 2].Time)
            PreBarTime = records[records.length - 1].Time
        }
        $.PlotLine('ma'+fastMaPeriod, fastMa[fastMa.length - 1], records[fastMa.length - 1].Time)
        $.PlotLine('ma'+slowMaPeriod, slowMa[slowMa.length - 1], records[slowMa.length - 1].Time)
}
}

function init () {
    if (fastMaPeriod > slowMaPeriod) {
        throw '快MA周期 > 慢MA周期, 请检查设置'
    }
    Log('快MA周期	    :'  + fastMaPeriod)
    Log('慢MA周期	    :' + slowMaPeriod)
    Log('轮询间隔(ms)   :' + interval)
    Log('是否是震荡策略  :' + (isShock?'是':'否'))
    Log('多空选择	    :' + (direction == 0 ? '多':'空'))
    Log('杠杆大小	    :' + (marginLevel == 0 ? '全仓':marginLevel))
    Log('连续阳(阴)K线数(做多时,连续阳线)数   :' + maxSameDirKNum)
    Log('连续阴(阳)K线数(做多时,连续阴线)   :' + maxOppositeDirKNum)
    Log('运行多少根K后退出   :' + runNBars)
    startTime = new Date()
    localIsShock = isShock
}

function onexit() {
    Log('退出')
}

function onerror() {
    Log('出错退出')
}

function openLong(ex, openAmount) {
    if (holdAmount + openAmount <= maxHoldAmount) {
        Log('已持仓: ' + holdAmount + ', 加仓:' + openAmount)
        ex.SetDirection('buy')
        if(isTaker) {
            ex.Buy(-1, openAmount, '吃单')
            holdAmount += openAmount
        } else {
            var ticker = _C(ex.GetTicker)
            if(ticker == null) {
                return false
            }
            ex.Buy(ticker.Buy, openAmount, '挂单')
        }
        return true
    } else {
        Log('持仓('+holdAmount+') 过多,不加仓')
        return false
    }
}

function closeLong(ex, closeAmount) {
    if (holdAmount >= closeAmount) {
        Log('已持仓: ' + holdAmount + ', 减仓:' + closeAmount)
        ex.SetDirection('closebuy')
        ex.Sell(-1, closeAmount)
        holdAmount -= closeAmount
        return true
    } else {
        Log('持仓('+holdAmount+') 过少,不减仓')
        return false
    }
}

function openShort(ex, openAmount) {
    if (holdAmount + openAmount <= maxHoldAmount) {
        Log('已持仓: ' + holdAmount + ', 加仓:' + openAmount)
        ex.SetDirection('sell')
        if(isTaker) {
            ex.Sell(-1, openAmount, '吃单')
            holdAmount += openAmount
        } else {
            var ticker = _C(ex.GetTicker)
            if(ticker == null) {
                return false
            }
            ex.Sell(ticker.Sell, openAmount, '挂单')
        }
        return true
    } else {
        Log('持仓('+holdAmount+') 过多,不加仓')
        return false
    }
}

function closeShort(ex, closeAmount) {
    if (holdAmount >= closeAmount) {
        Log('已持仓: ' + holdAmount + ', 减仓:' + closeAmount)
        ex.SetDirection('closesell')
        ex.Buy(-1, closeAmount)
        holdAmount -= closeAmount
        return true
    } else {
        Log('持仓('+holdAmount+') 过少,不减仓')
        return false
    }
}

function cancelOrders(ex) {
    Log('取消所有挂单')
    while(true) {
        var orders = _C(ex.GetOrders)
        if (orders.length == 0) {
            break
        }
        for(var i = 0; i < orders.length;i++) {
            ex.CancelOrder(orders[i].Id)
        }
    }
}

function updatePosition(ex) {
    var pos = ex.GetPosition()
    if(typeof(pos) === 'undefined' || pos === null || 
        pos.length == 0 || typeof(pos[0].Type) == 'undefined'  || typeof(pos[0].Amount) == 'undefined' ) {
        return
    }
    Log('仓位信息:' + (pos[0].Type == 0?'多仓,   ':'空仓,  ') + JSON.stringify(pos))
    if(pos.length>0){
        holdAmount = pos[0].Amount
        // if(pos[0].Type == 0){ //多仓
        //     ordersInfo.pos = pos[0].Amount
        // }else{
        //     ordersInfo.pos = -pos[0].Amount
        // }
    }
}

function longStrategy(ex, records) {
    var lastSecondBar = records[records.length-2]

    if ((   lastSecondBar.Close > fastMa[fastMa.length - 2] && 
            lastSecondBar.Close > slowMa[slowMa.length - 2] && 
            lastSecondBar.Close > records[records.length - 2 - fastMaPeriod].Close
        ) || localIsShock){
            var openAmount = amount
            if (lastSecondBar.Close < lastSecondBar.Open) {
                yinxianCnt += 1
                yangxianCnt = 0
            } else if (lastSecondBar.Close > lastSecondBar.Open){
                yinxianCnt = 0
                yangxianCnt += 1
            } else {
                yangxianCnt = 0
                yinxianCnt = 0
            }

            if (yinxianCnt >= maxOppositeDirKNum) {
                Log('两连阴')
                openAmount += amount
                yinxianCnt = 0
            }

            if (yangxianCnt >= maxSameDirKNum) {
                Log('三连阳')
                yangxianCnt = 0
                Log('准备减仓')
                if(closeLong(ex, closeAmount)){
                    $.PlotFlag(records[records.length - 1].Time, 'closeLong', 'CL')
                }
            } else {
                Log('准备开仓')
                if(localIsShock) {
                    openAmount -= amount
                }
                if(openLong(ex, openAmount)){
                    $.PlotFlag(records[records.length - 1].Time, 'openLong', 'OL')
                }
            }
    }
}

function shortStrategy(ex, records) {
    var lastSecondBar = records[records.length-2]

    if ((   lastSecondBar.Close < fastMa[fastMa.length - 2] && 
            lastSecondBar.Close < slowMa[slowMa.length - 2] && 
            lastSecondBar.Close < records[records.length - 2 - fastMaPeriod].Close
        ) || localIsShock){
            var openAmount = amount
            if (lastSecondBar.Close < lastSecondBar.Open) {
                yinxianCnt += 1
                yangxianCnt = 0
            } else if (lastSecondBar.Close > lastSecondBar.Open){
                yinxianCnt = 0
                yangxianCnt += 1
            } else {
                yangxianCnt = 0
                yinxianCnt = 0
            }

            if (yangxianCnt >= maxOppositeDirKNum) {
                Log('两连阳')
                yangxianCnt = 0
                openAmount += amount
            } 

            if (yinxianCnt >= maxSameDirKNum) {
                Log('三连阴')
                yinxianCnt = 0
                Log('准备减仓')
                if(closeShort(ex, closeAmount)){
                    $.PlotFlag(records[records.length - 1].Time, 'closeShort', 'CS')
                }
            } else {
                Log('准备开仓')
                if(localIsShock) {
                    openAmount -= amount
                }
                if(openShort(ex, openAmount)){
                    $.PlotFlag(records[records.length - 1].Time, 'openShort', 'OS')
                }
            }
    }
}

function onBar (ex) {
    var records = _C(ex.GetRecords)
    if (records === null || records.length < slowMaPeriod) {
        return 
    }
    if (lastBar == null) {
        lastBar = records[records.length-1]
    }
    
    if (lastBar.Time == records[records.length-1].Time) {
        return
    }
    lastBar = records[records.length-1]
    updatePosition(ex)
    PlotMA_Kline(records)
    barCnt += 1

    var lastSecondBar = records[records.length-2]
    fastMa = TA.MA(records, fastMaPeriod)
    slowMa = TA.MA(records, slowMaPeriod)
    lastClose = lastSecondBar.Close
    last5thClose = records[records.length - 2 - 5].Close

    Log('收盘价:' +lastSecondBar.Close + 
    ', 前第5个收盘价:' +records[records.length - 2 - 5].Close + 
    ', 快MA:' + _N(fastMa[fastMa.length - 2]) +
    ', 慢MA:' + _N(slowMa[slowMa.length - 2]))
    if (makeLong) {
        longStrategy(ex, records)
    } else {
        shortStrategy(ex, records)
    }
}

function runLife(ex) {
    // var pass = new Date() - startTime
    if (barCnt >= runNBars) {
        if(isCleanPosition) {
            Log('已运行'+barCnt+'K周期,结束,取消订单,清仓#ff0000@')
            cancelOrders(ex)
            updatePosition(ex)
            $.PlotFlag(lastBar.Time, 'Exit', 'EXT')
            
            if (makeLong) {
                closeLong(ex, holdAmount)
            } else {
                closeShort(ex, holdAmount)
            }    
        } else {
            Log('已运行'+barCnt+'K周期,结束,不取消订单,不清仓#ff0000@')
            updatePosition(ex)
            $.PlotFlag(lastBar.Time, 'Exit', 'EXT')
        }
        return true
    } else {
        return false
    }
}

function status() {
    var table = {
        type: 'table',
        title: '信息',
        cols: [
            '运行K数',
            '持仓量',
            '阳线',
            '阴线',
            '收盘价',
            '前第5个收盘价',
            'MA'+fastMaPeriod,
            'MA'+slowMaPeriod,
        ],
        rows: []
      }
      table.rows.push([
            barCnt,
            holdAmount,
            yangxianCnt,
            yinxianCnt,
            lastClose,
            last5thClose,
            fastMa.length == 0 ? 0 : _N(fastMa[fastMa.length - 2]),
            slowMa.length == 0 ? 0 : _N(slowMa[slowMa.length - 2])
      ])
    LogStatus(
        '现在时间:' +_D() +
        '\n启动时间:' +startTime +
        '\n`' +
        JSON.stringify(table)+
        '`\n' +
        '\n托管者版本:' +Version() +
        '\n联系Wechat:ying5737#00ff00' +
        '\nWechat: ying5737info#ff000f'
      )

}

function reset() {
    holdAmount = 0
    lastBar = null
    yinxianCnt = 0
    yangxianCnt = 0
    lastClose = 0
    last5thClose = 0
    fastMa = []
    slowMa = []
    barCnt = 0
}

function main () {
    var ex = exchanges[0]

    Log('开工   '+ex.GetName())
 //   if(ex.GetName() != 'Futures_FMex' && !IsVirtual()) {
  //      throw '仅仅支持FMex'
  //  }
    Log('基地址  ' + baseUrl)
    if(!IsVirtual()){
        ex.IO('base', baseUrl) //切换基地址,方便切换实盘和模拟盘,实盘地址:https://api.fmex.com
    }
    ex.SetTimeout(1000);
    _CDelay(500)
    ex.SetContractType(contractType)
    ex.SetMarginLevel(marginLevel)
    updatePosition(ex)
    while (true) {
        try {
            if(!IsVirtual() && runLife(ex)) {
                if((typeof(GetCommand) == 'function') && enableCommand){
                    Log('等待指令, 继续 | 停止 #ff0000@')
                    while (true) {
                        var cmd = GetCommand()
                        if (cmd) {
                            Log('收到指令: '+cmd)
                            switch(cmd) {
                                case '停止':
                                    Log('停止, 退出!#ff0000@')
                                    return
                                case '继续':
                                    reset()
                                    Log('继续, 复位,开工!#ff0000@')
                                    break
                                case '切换策略行情:0':
                                    reset()
                                    localIsShock = true
                                    Log('切换策略行情为震荡行情继续, 复位,开工!#ff0000@')
                                    break
                                case '切换策略行情:1':
                                    reset()
                                    localIsShock = false
                                    Log('切换策略行情为趋势行情继续, 复位,开工!#ff0000@')
                                    break
                            }
                            if (cmd == '停止'){
                                Log('停止, 退出!#ff0000@')
                                return
                            } else if (cmd == '继续') {
                                reset()
                                Log('继续, 复位,开工!#ff0000@')
                                break
                            }
                        }
                        updatePosition(ex)
                        status()
                        Sleep(1000)
                    }
                } else {
                    Log('停止, 退出!#ff0000@')
                    return
                }
            }
            onBar(ex)
            status()
        } catch(e) {
            Log('出错了:'+e+', 请及时处理#ff0000@')
        }
        Sleep(interval)
    }
}


Más.

Gulishiduan_ ordenado en alta frecuenciaGracias al apoyo de Eric de Wuhan por la idea de cuantificar el dinero.

Gulishiduan_ ordenado en alta frecuencia 沟通//或其他策略购买请咨询:weixin:ying5737

Gulishiduan_ ordenado en alta frecuenciaAlgunas de las estrategias más comunes para optimizar son: 1, gestión de posiciones: la gestión de posiciones de posición abierta / porcentaje de capital total, más adecuado para su uso, especialmente en algunos sistemas de alta frecuencia / movimiento / línea media larga, esta estrategia de posición es muy buena. 2, el principio del modelo de la explosión es, basándose en la mentalidad monetaria: ganancia de la inversión; estrategia, después de que el rendimiento alcanza el 20%, se inicia el llamado modelo de la explosión de la explosión de la explosión; es decir, sobre la base de la ganancia del 20%, para aumentar la velocidad de las transacciones, aumentar el volumen de pedidos, aumentar los beneficios potenciales, por supuesto, el riesgo potencial, en la ganancia de más del 20% de la explosión de la explosión de la explosión de la explosión del modelo también se amplificará. 3. Reinvertir el capital: se recomienda invertir el capital mensualmente en caso de que sea rentable, hay muchos riesgos potenciales en el mercado, incluso el riesgo de las bolsas, etc. Si no es una estrategia completa que haya desarrollado usted mismo, considere: Revertir el capital mensualmente es un muy buen mecanismo. La estrategia de tiempo del robot es mejor que la estrategia de negociación de inducción manual o subjetiva. Muchos amigos desarrollan estrategias sin parámetros de tiempo, lo que lleva a algunas estrategias que se usan en contra de la tendencia del mercado o el estado del mercado, para usar la estrategia.