دو طرفہ معاہدہ گرڈ ٹریڈنگ v1.0.2

مصنف:ہوا، تاریخ: 2021-06-24 15:37:17
ٹیگز:گرڈ

دو طرفہ معاہدہ گرڈ ٹریڈنگ v1.0.2

افعال

معاہدہ گرڈ کی تجارت اس کے علاوہ، یہ بھی کام کرنے کے لئے زیادہ کام کرنے کے ذریعے فرق سود حاصل کرنے کے لئے ہے. دو طرفہ حکمت عملی کی وجہ سے، یہ بہت کم امکان ہے

  • خریدنے کا فیصلہ وقت سے زیادہ
  • دوگنا کرنا
  • خود کار طریقے سے ادائیگی
  • رجحانات کھولیں (تعمیر کے تحت ، معاوضہ ورژن)
  • اتار چڑھاؤ کی رفتار متحرک طور پر تبدیلی کی تعداد (تعمیر کے تحت ، معاوضہ ورژن)
  • گولڈ فورک ڈڈ فورک رجحان شامل ہو گیا ((تعمیر کے تحت ، معاوضہ ورژن)

اعداد و شمار کی جانچ پڑتال

img

img

نصف سال 2000 میں دوگنا اس کے فوائد واضح ہیں، اور اس کے باوجود، یہ ایک بڑا اضافہ یا گرنے کے لئے کافی ہے.

بحالی

مسلسل اصلاح



/*backtest
start: 2021-01-01 00:00:00
end: 2021-06-21 23:59:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":2000}]
*/

// 首次买入
let FIRST_BUY = true;
// 已存在买涨订单
let MANY_BUYING = false;
// 已存在做空订单
let SHORT_BUYING = false;
// 买涨订单创建时间
let MANY_BUY_TIME = null;
// 做空订单创建时间
let SHORT_BUY_TIME = null;
// 买涨空仓时间
let MANY_EMPTY_STEP_TIME = null;
// 做空空仓时间
let SHORT_EMPTY_STEP_TIME = null;
// 校验空仓时间
let CHECK_TIME = null;

let QUANTITY = [0.001, 0.002, 0.004, 0.008, 0.016, 0.032, 0.064];
// 下次购买价格(多仓)
let MANY_NEXT_BUY_PRICE = 0;
// 下次购买价格(空仓)
let SHORT_NEXT_BUY_PRICE = 0;
// 当前仓位(多仓)
let MANY_STEP = 0;
// 当前仓位(空仓)
let SHORT_STEP = 0;
// 止盈比率
let PROFIT_RATIO = 1;
// 补仓比率
let DOUBLE_THROW_RATIO = 1.5;
// 卖出后下次购买金额下浮比率
let BUY_PRICE_RATIO = 1;
// 交易订单列表(多仓)
let MANY_ORDER_LIST = [];
// 交易订单列表(空仓)
let SHORT_ORDER_LIST = [];

function getManyQuantity() {
    if (MANY_STEP < QUANTITY.length) {
        return QUANTITY[MANY_STEP]
    }
    return QUANTITY[0]
}

function getShortQuantity() {
    if (SHORT_STEP < QUANTITY.length) {
        return QUANTITY[SHORT_STEP]
    }
    return QUANTITY[0]
}

function firstManyBuy(ticker) {
    if (MANY_BUYING) {
        return
    }
    exchange.SetDirection("buy")
    let orderId = exchange.Buy(ticker.Last, getManyQuantity())
    if (!orderId) {
        return
    }
    MANY_BUYING = true
    while (true) {
        exchange.SetDirection("buy") 
        let order = exchange.GetOrder(orderId)
        if (null === order) {
            continue
        }
        if (1 === order.Status || 2 === order.Status) {
            MANY_NEXT_BUY_PRICE = order.Price * ((100 - DOUBLE_THROW_RATIO) / 100)
            MANY_STEP = MANY_STEP + 1
            MANY_BUYING = false
            MANY_EMPTY_STEP_TIME = null
            let sellPrice = order.Price * ((100 + PROFIT_RATIO) / 100)
            MANY_ORDER_LIST.push({
                buyPrice: order.Price,
                sellPrice: sellPrice,
                quantity: order.Amount,
                isSell: false,
            })
            break
        }
    }
}

function firstShortBuy(ticker) {
    if (SHORT_BUYING) {
        return
    }
    exchange.SetDirection("sell")
    let orderId = exchange.Sell(ticker.Last, getShortQuantity())
    if (!orderId) {
        return
    }
    SHORT_BUYING = true
    while (true) {
        let order = exchange.GetOrder(orderId)
        if (null === order) {
            continue
        }
        if (1 === order.Status || 2 === order.Status) {
            SHORT_NEXT_BUY_PRICE = order.Price * ((100 + DOUBLE_THROW_RATIO) / 100)
            SHORT_STEP = SHORT_STEP + 1
            SHORT_BUYING = false
            SHORT_EMPTY_STEP_TIME = null
            let sellPrice = order.Price * ((100 - PROFIT_RATIO) / 100)
            SHORT_ORDER_LIST.push({
                buyPrice: order.Price,
                sellPrice: sellPrice,
                quantity: order.Amount,
                isSell: false,
            })
            break
        }
    }
}

function manyBuy(ticker) {
    if (MANY_BUYING) {
        return
    }
    Log('ticker: ' + ticker.Last + ' MANY_NEXT_BUY_PRICE: ' + MANY_NEXT_BUY_PRICE)
    if (ticker.Last > MANY_NEXT_BUY_PRICE) {
        return
    }
    exchange.SetDirection("buy")
    let orderId = exchange.Buy(ticker.Last, getManyQuantity())
    if (!orderId) {
        return
    }
    MANY_BUYING = true
    MANY_BUY_TIME = Unix()
    while (true) {
        let now = Unix()
        let order = exchange.GetOrder(orderId)
        let expire = MANY_BUY_TIME + (60 * 30)
        if (null === order) {
            continue
        }
        // 买入成功处理
        if (1 === order.Status || 2 === order.Status) {
            MANY_NEXT_BUY_PRICE = order.Price * ((100 - DOUBLE_THROW_RATIO) / 100)
            MANY_STEP = MANY_STEP + 1
            MANY_BUYING = false
            MANY_EMPTY_STEP_TIME = null
            let sellPrice = order.Price * ((100 + PROFIT_RATIO) / 100)
            MANY_ORDER_LIST.push({
                buyPrice: order.Price,
                sellPrice: sellPrice,
                quantity: order.Amount,
                isSell: false,
            })
            break
        }
        // 买入超时处理
        if (now >= expire) {
            exchange.CancelOrder(orderId)
            MANY_BUYING = false
            MANY_BUY_TIME = null
            MANY_NEXT_BUY_PRICE = ticker.Last * ((100 - DOUBLE_THROW_RATIO) / 100)
            return
        }
    }
}

function shortBuy(ticker) {
    if (SHORT_BUYING) {
        return
    }
    Log('ticker: ' + ticker.Last + ' SHORT_NEXT_BUY_PRICE: ' + SHORT_NEXT_BUY_PRICE)
    if (ticker.Last < SHORT_NEXT_BUY_PRICE) {
        return
    }
    exchange.SetDirection("sell")
    let orderId = exchange.Sell(ticker.Last, getShortQuantity())
    if (!orderId) {
        return
    }
    SHORT_BUYING = true
    SHORT_BUY_TIME = Unix()
    while (true) {
        let now = Unix()
        let expire = SHORT_BUY_TIME + (60 * 30)
        let order = exchange.GetOrder(orderId)
        if (null === order) {
            continue
        }
        // 买入成功处理
        if (1 === order.Status || 2 === order.Status) {
            SHORT_NEXT_BUY_PRICE = order.Price * ((100 + DOUBLE_THROW_RATIO) / 100)
            SHORT_STEP = SHORT_STEP + 1
            SHORT_BUYING = false
            SHORT_EMPTY_STEP_TIME = null
            let sellPrice = order.Price * ((100 - PROFIT_RATIO) / 100)
            SHORT_ORDER_LIST.push({
                buyPrice: order.Price,
                sellPrice: sellPrice,
                quantity: order.Amount,
                isSell: false,
            })
            break
        }
        // 买入超时处理
        if (now >= expire) {
            exchange.CancelOrder(orderId)
            SHORT_BUYING = false
            SHORT_BUY_TIME = null
            SHORT_NEXT_BUY_PRICE = ticker.Last * ((100 + DOUBLE_THROW_RATIO) / 100)
            return
        }
    }
}


function manySell(ticker) {
    // 遍历卖出订单
    for (let item of MANY_ORDER_LIST) {
        if (item.isSell) {
            continue
        }
        if (ticker.Last >= item.sellPrice) {
            item.isSell = true;
            exchange.SetDirection("closebuy")
            let orderId = exchange.Sell(ticker.Last, item.quantity)
            if (!orderId) {
                return
            }
            while (true) {
                let order = exchange.GetOrder(orderId)
                if (null === order) {
                    continue
                }
                if (1 === order.Status || 2 === order.Status) {
                    MANY_NEXT_BUY_PRICE = ticker.Last * ((100 - BUY_PRICE_RATIO) / 100)
                    MANY_STEP = MANY_STEP - 1
                    if (0 === MANY_STEP) {
                        MANY_EMPTY_STEP_TIME = Unix()
                    }
                    break
                }
            }
        }
    }
}

function shortSell(ticker) {
    // 遍历卖出订单
    for (let item of SHORT_ORDER_LIST) {
        if (item.isSell) {
            continue
        }
        if (ticker.Last <= item.sellPrice) {
            item.isSell = true;
            exchange.SetDirection("closesell")
            let orderId = exchange.Buy(ticker.Last, item.quantity)
            if (!orderId) {
                return
            }
            while (true) {
                let order = exchange.GetOrder(orderId)
                if (null === order) {
                    continue
                }
                if (1 === order.Status || 2 === order.Status) {
                    SHORT_NEXT_BUY_PRICE = ticker.Last * ((100 + BUY_PRICE_RATIO) / 100)
                    SHORT_STEP = SHORT_STEP - 1
                    if (0 === SHORT_STEP) {
                        SHORT_EMPTY_STEP_TIME = Unix()
                    }
                    break
                }
            }
        }
    }
}

function check(ticker) {
    let now = Unix()
    if (null !== CHECK_TIME) {
        let expire = CHECK_TIME + (60 * 10)
        if (now < expire) {
            return
        }
    }
    CHECK_TIME = now

    if (null !== MANY_EMPTY_STEP_TIME) {
        let expire = MANY_EMPTY_STEP_TIME + (60 * 30)
        if (now >= expire) {
            MANY_NEXT_BUY_PRICE = ticker.Last * ((100 - DOUBLE_THROW_RATIO) / 100)
            Log('没有买涨持仓, 调整买入价: ' + MANY_NEXT_BUY_PRICE)
        }
    }
    
    if (null !== SHORT_EMPTY_STEP_TIME) {
        let expire = SHORT_EMPTY_STEP_TIME + (60 * 30)
        if (now >= expire) {
            SHORT_NEXT_BUY_PRICE = ticker.Last * ((100 + DOUBLE_THROW_RATIO) / 100)
            Log('没有做空持仓, 调整买入价: ' + SHORT_NEXT_BUY_PRICE)
        }
    }
}

function onTick() {
    // 在这里写策略逻辑,将会不断调用,例如打印行情信息
    let ticker = exchange.GetTicker()
    if (!ticker) {
        return
    }
    if (FIRST_BUY) {
        // 首次做多购买
        firstManyBuy(ticker)
        // 首次做空购买
        firstShortBuy(ticker)
        FIRST_BUY = false
        return
    }
    
    // 做多买入
    manyBuy(ticker)
    // 做空买入
    shortBuy(ticker)
    // 做多卖出
    manySell(ticker)
    // 做空卖出
    shortSell(ticker)
    // 空仓检测
    check(ticker)
}

function main() {
    // 开合约
    exchange.SetContractType("swap")

    while(true){
        onTick()
        // Sleep函数主要用于数字货币策略的轮询频率控制,防止访问交易所API接口过于频繁
        Sleep(60000)
    }
}


متعلقہ

مزید

ہیکسی8کیا آپ کو ملٹی کرنسی مل سکتی ہے؟

rich_roryچیک کا کیا مطلب ہے۔۔۔۔۔۔؟۔؟۔؟

آرٹوناس میں حکمت عملی کی پیرامیٹرز کیوں نہیں ہیں؟

Exodus[حوالہ درکار]اس کے علاوہ ، ای ٹی ایچ کی جانچ 2021-1-1 سے 201-6-21 تک 1-2 پر ہوگی ، کیا یہ ایف ایم زیڈ کا مسئلہ ہے یا روبوٹ کا مسئلہ ہے۔ مصنف خود جانچ سکتا ہے۔

ایونیہ ایک حقیقی کثیر خلائی ہیجنگ نہیں ہے، یہ ایک معاہدہ گرڈ کی طرح ہے.

Exodus[حوالہ درکار]ویکی میکس نے جواب نہیں دیا ، صرف یہاں آنے اور کچھ الفاظ کہنے کے لئے ، 7 دن تک چل رہا ہے ، 200 چھریاں اور 70 چھریاں۔ بہت اچھا ، لیکن اس دوران میں نے کچھ مسائل کا پتہ لگایا ہے۔ 1. دو طرفہ کھولنے کی واحد تقریب عام ہے؟ دیکھو حکمت عملی میں کہا جاتا ہے کہ دو طرفہ کھولنے، دھماکے کی شرح بہت کم ہے، لیکن سات دن کے علاوہ روبوٹ شروع ہونے پر دو طرفہ کھولنے، تقریبا کوئی دو طرفہ کھولنے، میری تحقیق کے بعد پتہ چلا ہے کہ 10 منٹ کی تازہ کاری ایک کھولنے کی پوزیشن، جس کی وجہ سے تبدیلی سست ہے کوئی مطلب نہیں ہے، اور نہ ہی دو طرفہ کھولنے، مثال کے طور پر آج بی ٹی سی آج 5 فیصد کی کمی نہیں کھولنے کے لئے؟ کیا یہاں بہتر بنانے کی ضرورت ہے؟ مثال کے طور پر توسیع کا پتہ لگانے کے وقفے؟ اس کے علاوہ، بڑی مارکیٹ میں صرف ایک طرفہ کھولنے کی توثیق کی توثیق کی توثیق کی، ایک طرفہ توڑ بھی سب سے کم گریڈ ہے، یہ سمجھ میں نہیں آتا. 2 ۔ دھماکے کے بارے میں ڈیفالٹ ہورکنگ فنڈز کے لئے ، نہیں چاہتے ہیں کہ ہورکنگ کی ضرورت ہے کو یقینی بنانے کے لئے 1000 سے 2000 سے زائد ہورکنگ کے فنڈز ، میں نے دو سو چھریوں آج اگر کوئی عجیب و غریب نہیں جاگ آیا ہوں میں نے دھماکے کی ہے ، عارضی طور پر اضافی ضمانت کی رقم. اگر کافی فنڈز نہیں ہیں تو ، آپ کو دستی طور پر ایڈجسٹ کر سکتے ہیں ہورکنگ کی تعداد ، یہاں یاد دلانے کے لئے ، ایسا نہ ہو کہ آپ کوڈ کی دھماکے کی ہورکنگ نہیں دیکھیں گے۔ 3۔ براہ کرم پوچھیں کہ چونکہ کبھی بھی نقصان نہیں ہوتا ، لہذا اگر کافی سرمایہ ہو تو کیا کبھی بھی دھماکہ نہیں ہوگا ، لیکن جائزہ لینے میں نقصان کیوں ہوگا؟ منطقی طور پر نقصان دھماکہ ہے ، یا پیسہ صفر تک پہنچ جاتا ہے ، ٹھیک ہے ، میں نے غلط کہاں سمجھا ہے ، اشارے طلب کریں۔ یہ حکمت عملی مجھے بہت پسند ہے ، آپ کو کسی بھی سمت سے فائدہ اٹھانا پڑتا ہے ، آپ کو زیادہ سے زیادہ پوزیشننگ اور سرمایہ کاری کے مطابق ایڈجسٹ کرنا پڑتا ہے ، آپ کو زیادہ خطرہ نہیں ہوتا ہے ، آپ کو لگتا ہے کہ آپ کو زیادہ سے زیادہ قیمتوں کو بہتر بنایا جاسکتا ہے ، آپ کو زیادہ سے زیادہ سرمایہ کاری کے مطابق ایڈجسٹ کیا جاسکتا ہے ، وغیرہ۔

ہاںXبھائی نے ویکیپیڈیا بھیجا

Exodus[حوالہ درکار]یہ حل ہے، اور بِیِنآن کے بدلے میں یہ کام کرتا ہے۔

Exodus[حوالہ درکار]چیک آؤٹ اچھا لگتا ہے ، لیکن ایسا لگتا ہے کہ یہ اصلی ڈسک پر استعمال نہیں کیا جاسکتا؟ میں نے ٹوکن کھولنے پر bch غلطی کا جواب دے گا ، Sell ((490.14 ، 0.001): map[err_code:1067 err_msg:The volume field is illegal. Please re-enter. status:error ts:1.625132342294e+12].

ڈبلیو بی ایسکوئی حقیقی پلیٹ نہیں؟

Exodus[حوالہ درکار]یہ منافع کا منحنی خطوط بہت خوفناک ہے، 120 فیصد سے زیادہ کا نقصان۔

نشے میں چراغ کھینچ کر تلوار دیکھنامجھے ہنسنے دو

Exodus[حوالہ درکار]یہ بہت افسوس کی بات ہے کہ آج ہم نے بہت زیادہ نقصان اٹھایا ہے ، اور ہم 2.0 کے منتظر ہیں ، براہ کرم پوچھیں کہ ہم نئی حکمت عملی کا تجربہ کیسے کرسکتے ہیں؟

ہواہم نے ان مسائل کو ورژن 2.0 میں دریافت کیا اور اس کی وجہ یہ ہے کہ آپ کی ادائیگی کا فیصد مقررہ ہے، یعنی ایک فیصد اضافہ، ایک فیصد کمی، ایک فیصد کمی، اور ایک فیصد اضافہ۔ چونکہ گرنے میں ایک فیصد ہوتا ہے ، گرنے میں خریدنے میں فیصد یکساں ہوتا ہے ، 1000 ٹن سے 1500 تک ، 1000 فیصد اور 1500 فیصد مختلف ہوتا ہے ، لہذا خالی جگہیں خریدنا زیادہ مشکل ہے ، اور قیمتوں میں بہت کثرت سے تبدیلی ہوتی ہے جس کی وجہ سے خالی جگہیں خریدنا ممکن نہیں ہوتا ہے۔ سٹاپ نقصان کا مسئلہ، ورژن 2.0 میں ایک خاص عمل کیا گیا ہے، ایک بہت ہی آسان سٹاپ نقصان کا عمل، لیکن retesting کے اعداد و شمار کی طرف سے اثر بھی ہو سکتا ہے، جب آپ کو خریدنے یا خالی پوزیشنوں کو ایک مخصوص حد تک پہنچنے کے لئے ایک مکمل اسٹاک فروخت شروع، 1.0 عملدرآمد نہیں کیا جاتا ہے تو کچھ احکامات کبھی نہیں کیا جا سکتا ہے، مثال کے طور پر بی ٹی سی 65000 میں خریداروں کی تعداد 0.001، تو بی ٹی سی گر گیا ہے. /upload/asset/2034c4ec56c423120b9c6.png /upload/asset/203032c94e60a3915cc9f.png /upload/asset/2030b880b030476977f4b.png

ہوامیں نے بائنن کا استعمال کرتے ہوئے ٹیسٹ کیا ہے کہ کیا دوسرے پلیٹ فارم غلطیاں بھیج سکتے ہیں۔

ہواڈیبٹ ابھی بھی چل رہا ہے، وقت درکار ہے

ہوااور آپ کو یہ بھی دیکھنا چاہئے کہ یہ کس طرح کام کرتا ہے۔