سنگل پوائنٹ اسنیپر ہائی فریکوئنسی ہاؤسنگ خود کار طریقے سے انسداد ہاتھ کھولنے الگورتھم V1.2

مصنف:صفر، تاریخ: 2014-11-30 12:00:04
ٹیگز:ہائی فریکوئنسی

سب سے پہلے تجارت شروع کریں ، ایک فائدہ مند فائدہ اٹھانے والی تجارت کی وضاحت کریں ، اگر یہ برابر نہیں ہوسکتی ہے ، تو اسٹاپ نقصان کے نقطہ سے زیادہ ، پھر تجارت کو کم لاگت کی قیمتوں میں بڑھائیں ، منافع بخش باہر نکلنے تک ، اگر تجارت میں اضافہ ہوا ہے تو ، آپ کو رقم یا سکوں میں اضافہ نہیں ہوا ہے ، تو آپ کو مخالف ہاتھ کرنا شروع کرنا چاہئے ، جو پہلے خالی تھا ، پھر مخالف ہاتھ زیادہ کریں ، اور اسی طرح دہرانا جاری رکھیں۔

مثال کے طور پر اب 10 یوآن کی اوسط قیمت پر کھولی جانے والی زیادہ پوزیشن ، ہدف منافع 5 روپے ہے ، پروگرام ایک 10.5 یوآن فروخت شدہ ٹکٹ لٹاتا ہے ، اگر قیمت گرتی ہے تو ، موجودہ قیمت کے قریب ہی ٹکٹ لٹاتا ہے ، اوسط قیمت کو ایڈجسٹ کرتا ہے ، اور پھر ایک ہدف منافع ٹکٹ لٹاتا ہے ، اگر یہ ابھی تک کام نہیں کرتا ہے تو ، ٹکٹ لٹاتے رہیں اور اوسط قیمت کو کم کریں ، حقیقت میں کام نہیں کرتا ہے ، بند ہو جاتا ہے ، پھر مخالف ہاتھ سے خالی ٹکٹ بنانا شروع ہوتا ہے۔

حکمت عملی کا خود کار طریقے سے رد عمل

اگر آپ فی الحال زیادہ پوزیشن کرتے ہیں تو ، منافع ختم ہوجاتا ہے ، خود بخود مزید پوزیشنیں بنائے گا۔ اگر آپ کو سوٹ کیا جاتا ہے تو ، نقد رقم کے خلاف خالی پوزیشن بنائیں ، خالی پوزیشن منافع بخش ہونے کے بعد ، خالی پوزیشن کرنا جاری رکھیں ، جب تک کہ پوزیشن میں اضافہ نہ ہو ، مخالف ہاتھ زیادہ پوزیشن کرنا شروع کردے ، اس طرح یہ سلسلہ جاری رہتا ہے۔ جب تک کہ آخری بار منافع بخش ہے تو ہمیشہ پچھلی بار کی کھلی پوزیشن کی سمت برقرار رکھیں۔ حکمت عملی خود کار طریقے سے ذخیرہ کرنے کی ضرورت کی مقدار اور ہدف کے فوائد کی نئی قیمت کا حساب لگاتی ہے۔ توجہ کی ضرورت

اس حکمت عملی میں مکمل بازیابی کا طریقہ کار ہے جو عملی طور پر استعمال کیا جاسکتا ہے یا سیکھا جاسکتا ہے۔ یہ حکمت عملی 100 فیصد منافع بخش ہونے کی شرط پر مبنی ہے: آپ کو کافی رقم جمع کرنے کی ضرورت ہے۔ اگر آپ کے پاس کافی فنڈز نہیں ہیں تو ، آپ کو خود کار طریقے سے اس کا مقابلہ کرنے کی ضرورت ہے ، جس سے آپ کو فلوٹنگ منافع اور نقصانات ملتے ہیں۔ اگر آپ کے پاس کافی فنڈز ہیں تو آپ کو خود بخود واپس کرنے کی ضرورت نہیں ہے، آپ کو ہمیشہ پروگراموں کو ذخیرہ کرنے کی ضرورت ہے. حکمت عملی پیرامیٹرز کو ایڈجسٹ کرکے اعلی تعدد کی تجارت کی حکمت عملی کو حاصل کرسکتی ہے۔ مستقبل کے لئے موزوں نہیں ، مستقبل کے ساتھ تجارت کرنا آسان ہے ، لہذا صرف نقد رقم ہی کام کرتی ہے۔ اوپن سورس کا مقصد

اور اس کے بجائے کہ ہم دن بھر بند گاڑیوں کی بجائے زیادہ سے زیادہ لوگوں کو کوانٹیمیٹڈ ٹریڈنگ میں شامل کرنے کی کوشش کریں۔

V1.1 نے OKCoin کی 0.001 سکے منجمد کرنے کے مسئلے کو حل کیا جس کی وجہ سے پروگرام پھنس گیا

مزید تفصیلات کے لیے، یہاں جائیں:https://www.fmz.com/#!/bbs-topic/38



var TradeType = OpType == 0 ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
var OrgAccount = null;
var Counter = {s : 0, f: 0};
var LastProfit = 0;
var AllProfit = 0;
var LastTicker = null;
function _N(v, precision) {
    if (typeof(precision) != 'number') {
        precision = 4;
    }
    var d = parseFloat(v.toFixed(Math.max(10, precision+5)));
    s = d.toString().split(".");
    if (s.length < 2 || s[1].length <= precision) {
        return d;
    }

    var b = Math.pow(10, precision);
    return Math.floor(d*b)/b;
}

function EnsureCall(e, method) {
    var r;
    while (!(r = e[method].apply(this, Array.prototype.slice.call(arguments).slice(2)))) {
        Sleep(Interval);
    }
    return r;
}

function StripOrders(e, orderId) {
    var order = null;
    if (typeof(orderId) == 'undefined') {
        orderId = null;
    }
    while (true) {
        var dropped = 0;
        var orders = EnsureCall(e, 'GetOrders');
        for (var i = 0; i < orders.length; i++) {
            if (orders[i].Id == orderId) {
                order = orders[i];
            } else {
                var extra = "";
                if (orders[i].DealAmount > 0) {
                    extra = "成交: " + orders[i].DealAmount;
                } else {
                    extra = "未成交";
                }
                e.CancelOrder(orders[i].Id, orders[i].Type == ORDER_TYPE_BUY ? "买单" : "卖单", extra);
                dropped++;
            }
        }
        if (dropped == 0) {
            break;
        }
        Sleep(300);
    }
    return order;
}

function updateProfit(e, account, ticker) {
    if (typeof(account) == 'undefined') {
        account = GetAccount(e);
    }
    if (typeof(ticker) == 'undefined') {
        ticker = EnsureCall(e, "GetTicker");
    }
    var profit = (((account.Stocks + account.FrozenStocks) - (OrgAccount.Stocks + OrgAccount.FrozenStocks)) * ticker.Last) + ((account.Balance + account.FrozenBalance) - (OrgAccount.Balance + OrgAccount.FrozenBalance));
    LogProfit(_N(profit + LastProfit, 4), "币数:", _N(account.Stocks + account.FrozenStocks, 4), "钱数:", _N(account.Balance + account.FrozenBalance, 4));
}


var preMsg = "";
function GetAccount(e, waitFrozen) {
    if (typeof(waitFrozen) == 'undefined') {
        waitFrozen = false;
    }
    var account = null;
    var alreadyAlert = false;
    while (true) {
        account = EnsureCall(e, "GetAccount");
        if (!waitFrozen || (account.FrozenStocks < MinStock && account.FrozenBalance < 0.01)) {
            break;
        }
        if (!alreadyAlert) {
            alreadyAlert = true;
            Log("发现账户有冻结的钱或币", account);
        }
        Sleep(Interval);
    }
    msg = "成功: " + Counter.s + " 次, " + (AutoReverse ? "被":"解") + "套: " + Counter.f + " 次, 当前账户 钱: " + account.Balance + " 币: " + account.Stocks;
    if (account.FrozenStocks > 0) {
        msg += " 冻结的币: " + account.FrozenStocks;
    }
    if (account.FrozenBalance > 0) {
        msg += " 冻结的钱: " + account.FrozenBalance;
    }

    if (LastTicker != null && OrgAccount != null && OrgAccount != null) {
        var profit = (((account.Stocks + account.FrozenStocks) - (OrgAccount.Stocks + OrgAccount.FrozenStocks)) * LastTicker.Last) + ((account.Balance + account.FrozenBalance) - (OrgAccount.Balance + OrgAccount.FrozenBalance));
        msg += " 平仓盈亏: " + AllProfit + ", 浮动盈亏: " + _N(profit, 4);
        msg += " (初始账户 钱: " + OrgAccount.Balance + " 币 : " + OrgAccount.Stocks + ")";
    }
    

    if (msg != preMsg) {
        preMsg = msg;
        LogStatus(msg, "#ff0000");
    }
    return account;
}

// mode = 0 : direct buy, 1 : buy as buy1
function Trade(e, tradeType, tradeAmount, mode, slidePrice, maxAmount, maxSpace, retryDelay) {
    var initAccount = GetAccount(e, true);
    var nowAccount = initAccount;
    var orderId = null;
    var prePrice = 0;
    var dealAmount = 0;
    var diffMoney = 0;
    var isFirst = true;
    var tradeFunc = tradeType == ORDER_TYPE_BUY ? e.Buy : e.Sell;
    var isBuy = tradeType == ORDER_TYPE_BUY;
    while (true) {
        var ticker = EnsureCall(e, 'GetTicker');
        LastTicker = ticker;
        var tradePrice = 0;
        if (isBuy) {
            tradePrice = _N((mode == 0 ? ticker.Sell : ticker.Buy) + slidePrice, 4);
        } else {
            tradePrice = _N((mode == 0 ? ticker.Buy : ticker.Sell) - slidePrice, 4);
        }
        if (orderId == null) {
            if (isFirst) {
                isFirst = false;
            } else {
                nowAccount = GetAccount(e, true);
            }
            var doAmount = 0;
            if (isBuy) {
                diffMoney = _N(initAccount.Balance - nowAccount.Balance, 4);
                dealAmount = _N(nowAccount.Stocks - initAccount.Stocks, 4);
                doAmount = Math.min(maxAmount, tradeAmount - dealAmount, _N((nowAccount.Balance-10) / tradePrice, 4));
            } else {
                diffMoney = _N(nowAccount.Balance - initAccount.Balance, 4);
                dealAmount = _N(initAccount.Stocks - nowAccount.Stocks, 4);
                doAmount = Math.min(maxAmount, tradeAmount - dealAmount, nowAccount.Stocks);
            }
            if (doAmount < MinStock) {
                break;
            }
            prePrice = tradePrice;
            orderId = tradeFunc(tradePrice, doAmount);
        } else {
            if (Math.abs(tradePrice - prePrice) > maxSpace) {
                orderId = null;
            }
            var order = StripOrders(exchange, orderId);
            if (order == null) {
                orderId = null;
            }
        }
        Sleep(retryDelay);
    }

    if (dealAmount <= 0) {
        return null;
    }

    return {price: _N(diffMoney / dealAmount, 4), amount: dealAmount};
}

function loop(isFirst) {
    var minStock = MinStock;
    var initAccount = GetAccount(exchange, true);
    Log(initAccount);
    var holdPrice = 0;
    var holdAmount = 0;
    if (RestoreIt && isFirst) {
        LastProfit = RestoreProfit;
        TradeType = RestoreType == 0 ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
        holdPrice = RestorePrice;
        holdAmount = RestoreAmount;
        if (holdAmount != 0) {
            initAccount = {
                Stocks: initAccount.Stocks,
                FrozenStocks: initAccount.FrozenStocks,
                Balance: initAccount.Balance,
                FrozenBalance: initAccount.FrozenBalance,
            };
            if (RestoreType == 0) {
                initAccount.Stocks -= holdAmount;
                initAccount.Balance += (holdPrice * holdAmount);
            } else {
                initAccount.Stocks += holdAmount;
                initAccount.Balance -= (holdPrice * holdAmount);
            }
            OrgAccount = initAccount;
            Log("恢复持仓状态为:", RestoreType == 0 ? "做多" : "做空", "均价:", holdPrice, "数量:", holdAmount);
            if (RestoreType == 0) {
                holdAmount = Math.min(initAccount.Stocks, holdAmount);
            }
        }
        if (LastProfit != 0) {
            AllProfit = LastProfit;
            LogProfit(LastProfit, "恢复上次盈利");
        }
    }
    if (holdAmount == 0) {
        var obj = Trade(exchange, TradeType, OpAmount, OpMode, SlidePrice, MaxAmount, MaxSpace, Interval);
        if (!obj) {
            throw "出师不利, 开仓失败";
        } else {
            Log(TradeType == ORDER_TYPE_BUY ? "开多仓完成" : "开空仓完成", "均价:", obj.price, "数量:", obj.amount);
        }
        Log(GetAccount(exchange, true));
        holdPrice = obj.price;
        holdAmount = obj.amount;
    }
    var openFunc = TradeType == ORDER_TYPE_BUY ? exchange.Buy : exchange.Sell;
    var coverFunc = TradeType == ORDER_TYPE_BUY ? exchange.Sell : exchange.Buy;
    var isFinished = false;
    while (!isFinished) {
        var account = GetAccount(exchange, true);
        var openAmount = 0;
        var openPrice = 0;
        var coverPrice = 0;
        var canOpen = true;

        if (TradeType == ORDER_TYPE_BUY) {
            var upLine = AddLine;
            openPrice = _N(holdPrice - AddGoal, 4);
            openAmount = _N((holdAmount * (holdPrice - openPrice - upLine)) / upLine, 4);
            coverPrice = _N(holdPrice + ProfitGoal, 4);
            if (_N(account.Balance / openPrice, 4) < openAmount) {
                Log("没有钱加多仓, 需要加仓: ", openAmount, "个");
                if (AutoReverse) {
                    return holdAmount;
                } else {
                    canOpen = false;
                }
            }
        } else {
            var upLine = -AddLine;
            openPrice = _N(holdPrice + AddGoal, 4);
            coverPrice = _N(holdPrice - ProfitGoal, 4);
            openAmount = _N((holdAmount * (holdPrice - openPrice - upLine) / upLine), 4);
            if (account.Stocks < openAmount) {
                Log("没有币加空仓, 需要币:", openAmount);
                if (AutoReverse) {
                    return holdAmount;
                } else {
                    canOpen = false;
                }
            }
        }
        if (holdAmount < minStock) {
            Log("剩余币数过小, 放弃操作", holdAmount);
            return 0;
        }
        openAmount = Math.max(minStock, openAmount);

        var order_count = 0;
        var openId = null;
        var coverId = null;
        if (!canOpen) {
            openId = -1;
            Log("进入等待解套模式");
        }

        for (var i = 0; i < 10; i++) {
            if (!openId) {
                openId = openFunc(openPrice, openAmount);
            }
            if (!coverId) {
                coverId = coverFunc(coverPrice, holdAmount);
            }
            if (openId && coverId) {
                break;
            }
            Sleep(Interval);
        }
        if (!openId || !coverId) {
            StripOrders(exchange);
            throw "下单失败";
        }
        if (openId > 0) {
            order_count++;
        }
        if (coverId > 0) {
            order_count++;
        }

        var preAccount = account;
        while (true) {
            Sleep(Interval);
            var ticker = EnsureCall(exchange, "GetTicker");
            var orders = EnsureCall(exchange, "GetOrders");
            LastTicker = ticker;
            var nowAccount = GetAccount(exchange);
            var diff = nowAccount.Stocks + nowAccount.FrozenStocks - preAccount.Stocks;

            if (orders.length != order_count || Math.abs(diff) >= minStock) {
                StripOrders(exchange);
                nowAccount = GetAccount(exchange, true);
                //Log(nowAccount);
                var diffAmount = nowAccount.Stocks - initAccount.Stocks;
                var diffMoney = nowAccount.Balance - initAccount.Balance;
                if (Math.abs(diffAmount) < minStock) {
                    AllProfit= _N(AllProfit + (holdAmount * ProfitGoal), 4);
                    LogProfit(AllProfit, "平仓完成, 达到目标盈利点, 单次盈利", _N(holdAmount * ProfitGoal, 4));
                    initAccount = nowAccount;
                    isFinished = true;
                    if (!canOpen) {
                        Counter.f++;
                    }
                    break;
                }
                var newHoldPrice = 0;
                var newHoldAmount = 0;
                if (TradeType == ORDER_TYPE_BUY) {
                    newHoldAmount = _N(diffAmount, 4);
                    newHoldPrice = _N((-diffMoney) / diffAmount, 4);
                } else {
                    newHoldAmount = _N(-diffAmount, 4);
                    newHoldPrice = _N(diffMoney / (-diffAmount), 4);
                }
                // if open again, we need adjust hold positions's price
                var isAdd = false;
                if (newHoldAmount > holdAmount) {
                    holdPrice = newHoldPrice;
                    isAdd = true;
                }
                holdAmount = newHoldAmount;
                if (!isAdd) {
                    // reset initAccount
                    initAccount = {
                        Stocks : nowAccount.Stocks,
                        Balance : nowAccount.Balance,
                        FrozenBalance : nowAccount.FrozenBalance,
                        FrozenStocks : nowAccount.FrozenStocks,
                    };
                    if (TradeType == ORDER_TYPE_BUY) {
                        initAccount.Stocks -= holdAmount;
                        initAccount.Balance += holdAmount * holdPrice;
                    } else {
                        initAccount.Stocks += holdAmount;
                        initAccount.Balance -= holdAmount * holdPrice;
                    }
                    initAccount.Stocks = _N(initAccount.Stocks, 4);
                    initAccount.Balance = _N(initAccount.Balance, 4);
                    Log("持仓前账户调整为: ", initAccount);
                }
                Log((TradeType == ORDER_TYPE_BUY ? "多仓" : "空仓"), (isAdd ? "加仓后" : "平仓后"), "重新调整持仓, 均价: ", holdPrice, "数量", holdAmount);
                Log("买一:", ticker.Buy, "卖一:", ticker.Sell, "上次成交价:", ticker.Last);
                Log(nowAccount);
                break;
            }
        }
    }
    return 0;
}

function onexit() {
    StripOrders(exchange);
    Log("Exit");
}

function main() {
    if (AddLine > AddGoal || AddLine <= 0) {
        throw "加仓均价目标错误";
    }
    if (exchange.GetName().indexOf("Future") != -1) {
        throw "只支持现货, 期货容易爆仓, 暂不支持";
    }
    if (exchange.GetRate() != 1) {
        Log("已禁用汇率转换");
        exchange.SetRate(1);
    }
    EnableLogLocal(SaveLocal);
    Interval *= 1000;
    SetErrorFilter("502:|503:|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF");
    StripOrders(exchange);
    OrgAccount = GetAccount(exchange);
    var isFirst = true;
    LogStatus("启动成功");
    while (true) {
        var ret = loop(isFirst);
        isFirst = false;
        if (ret != 0) {
            Counter.f++;
            if (TradeType == ORDER_TYPE_BUY) {
                TradeType = ORDER_TYPE_SELL;
                Log("开始反手做空");
            } else {
                TradeType = ORDER_TYPE_BUY;
                Log("开始反手做多");
            }
        } else {
            Counter.s++;
        }
        Sleep(Interval);
    }
}

متعلقہ

مزید

جے جےزیڈ بی ٹرانزیکشن میں ، ایک سے زیادہ پوزیشنیں مکمل ہوجاتی ہیں ، ایک خرید و فروخت کا آرڈر لگاتے ہیں ، ادائیگی مکمل ہوچکی ہے ، اشارہ کرتا ہے کہ آپ کو پتہ چلتا ہے کہ اکاؤنٹ میں پیسہ یا سکے منجمد ہیں ، پھر آپ پھنس جاتے ہیں ، ادائیگی زیڈ بی کی ایپ اور ڈیبگ ٹول میں دیکھی جاتی ہے ، کیا وجہ ہے؟

ٹونی7hپوچھیں کہ 100 فیصد جیتنے کا امکان کیوں ہے لیکن منافع کا تخمینہ منفی ہے؟ /upload/asset/10bb1893b448a3ea908a8.png

ٹونی7hسوال یہ ہے کہ جیتنے کا امکان 100 فیصد کیوں ہے اور منافع کا تخمینہ منفی کیوں ہے؟

مومیکس@zero جیسا کہ اس تصویر میں دکھایا گیا ہے، ہر بار جب آپ کو ایک اسٹوریج میں شامل کیا جاتا ہے، تو آپ کو لاگت کی قیمت + - ¥ 2 پر آرڈر کرنا پڑتا ہے، کیونکہ قیمتوں میں کمی کی رفتار یقینی طور پر مارکیٹ کی قیمتوں سے زیادہ سست ہوتی ہے، کیا اس سے زیادہ بار بار اسٹوریج کا مسئلہ پیدا نہیں ہوتا؟ مجھے معاف کرو، میں سمجھ نہیں سکتا. https://dn-filebox.qbox.me/e5d9e9be02f4545b3f75d4cb14f911045afe850f.png

مومیکس@zero، میں پوچھنا چاہوں گا کہ دوسری بار کیوں قیمت میں اضافہ نہیں ہوا ہے موجودہ مارکیٹ کی قیمت +-، لیکن موجودہ لاگت کی قیمت +-، یہ جان بوجھ کر یا غلطی سے ہے؟

صفرجیتنے کی شرح صرف تجارت کے بعد جیتنے کی شرح کا حساب لگایا جاسکتا ہے ، منافع کی پیش گوئی مارکیٹ کی قیمت کے بعد منافع کے حساب سے کی جاتی ہے ، چاہے تجارت ہو یا نہ ہو۔

مومیکسمیں سمجھتا ہوں، میں نے کچھ عرصے سے دوڑائی ہے، منافع غیر مستحکم ہے، اور آپ کا کہنا ہے کہ واپسی بہت زیادہ ہے، یہ کس طرح بہتر ہو سکتا ہے، اگر آپ کو ایک فون کال کریں، ایک خیال ہے، میں نے ایک چھوٹا سا پروگرامنگ کروں گا، میں دلچسپی رکھتا ہوں میں نے اسے تبدیل کر سکتے ہیں

صفریہ حکمت عملی بہت بڑی واپسی کی وجہ سے ہوتی ہے، کیونکہ یہ اکثر اتار چڑھاؤ کے وقت بڑھتی ہے.

صفراس کے علاوہ ، اس کی قیمتوں کا تعین کرنے کے لئے ، اس کی قیمتوں کا تعین کرنے کے لئے ، اس کی قیمتوں کا تعین کرنے کے لئے ، اس کی قیمتوں کا تعین کرنے کے لئے ، اس کی قیمتوں کا تعین کرنے کے لئے ، اس کی قیمتوں کا تعین کرنے کے لئے ، اس کی قیمتوں کا تعین کرنے کے لئے ، اس کی قیمتوں کا تعین کرنے کے لئے ، اس کی قیمتوں کا تعین کرنے کے لئے۔