একক-পয়েন্ট স্নাইপার উচ্চ-ফ্রিকোয়েন্সি শ্যাফট স্বয়ংক্রিয় প্রতিপক্ষের হাত মুক্ত করার অ্যালগরিদম V1.2

লেখক:শূন্য, তারিখঃ ২০১৪-১১-৩০ ১২ঃ০৪
ট্যাগঃউচ্চ ফ্রিকোয়েন্সি

প্রথমে ট্রেডিং শুরু করুন, একটি লাভ লাভের স্থিতিশীলতা নির্দিষ্ট করুন, যদি এটি সমান না হয়, স্টপ লস পয়েন্ট ছাড়িয়ে যায়, তবে আবার ট্রেডিং কম খরচে টানুন, লাভজনকভাবে বেরিয়ে আসার সাথে সাথে যোগ করুন, যদি ট্রেডিং যোগ করে কোনও অর্থ বা মুদ্রা যোগ করা হয় তবে বিপরীতভাবে শুরু করুন, এটি খালি ছিল, আরও বিপরীতভাবে করুন, এভাবেই পুনরাবৃত্তি করুন।

উদাহরণস্বরূপ, এখন 10 ইউএসডি খোলা একাধিক অবস্থান, লক্ষ্য মুনাফা 5 মুনাফা, প্রোগ্রাম একটি 10.5 ইউএসডি বিক্রি আদেশ ঝুলন্ত, যদি দাম পড়ে, বর্তমান মূল্য কাছাকাছি হোল্ডিং, সমন্বয় গড় মূল্য, এবং একটি লক্ষ্য মুনাফা আদেশ ঝুলন্ত, যদি না, অব্যাহত হোল্ডিং কম গড় মূল্য, আসলে না, বন্ধ, বিপরীত হাত খালি আদেশ করতে শুরু।

কৌশলগত স্বয়ংক্রিয় প্রতিক্রিয়া

যদি আপনি বর্তমানে বেশি পজিশন করেন, মুনাফা বেরিয়ে আসে, তবে স্বয়ংক্রিয়ভাবে আরও বেশি পজিশন করবেন, যদি আপনি স্যুট হয়ে থাকেন, তবে মুদ্রার বিপরীতে খালি পজিশন করুন, খালি পজিশন লাভের পরে, খালি পজিশনটি চালিয়ে যান, যতক্ষণ না পজিশনটি বাড়ানো যায়, তখন বিপরীত হাতটি আরও বেশি পজিশন করতে শুরু করে, এভাবেই চক্র। যতক্ষণ না শেষবার লাভজনক হয় ততক্ষণ আপনি সর্বদা আগেরবারের ওপেনিং পজিশনের দিক বজায় রাখবেন। কৌশলটি স্বয়ংক্রিয়ভাবে স্টকিংয়ের প্রয়োজনীয়তা এবং লক্ষ্যমাত্রা লাভের নতুন মান গণনা করে। যে বিষয়গুলো খেয়াল রাখতে হবে

এই কৌশলটি একটি সম্পূর্ণ পুনরুদ্ধার প্রক্রিয়া রয়েছে যা আপনি ব্যবহার করতে পারেন বা শিখতে পারেন। এই কৌশলটি ১০০% লাভের জন্য প্রয়োজনীয়ঃ আপনি পর্যাপ্ত পরিমাণে তহবিল জমা রাখতে প্রস্তুত। যদি পর্যাপ্ত তহবিল না থাকে, তাহলে স্বয়ংক্রিয় বিপরীতমুখী কাজ করুন। আপনি যদি পর্যাপ্ত অর্থের অধিকারী হন, তাহলে আপনাকে স্বয়ংক্রিয়ভাবে রিটার্ন করতে হবে না। কৌশলগুলি পরামিতিগুলি সামঞ্জস্য করে উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং কৌশলগুলি অর্জন করতে পারে ফরোয়ার্ডের জন্য উপযুক্ত নয়, ফরোয়ার্ডের মতো জিনিসগুলি খুব সহজেই বিকশিত হয়, তাই কেবল তাত্ক্ষণিকভাবে পরিচালনা করা যায় ওপেন সোর্সের উদ্দেশ্য

ক্যাপাসিটি ট্রেডিংয়ের চক্রের সাথে আরও বেশি লোককে যুক্ত করা, সারাদিনের বন্ধ দরজার গাড়ি তৈরির পরিবর্তে।

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প্রশ্নঃ কেন ১০০% জেতার সম্ভাবনা আছে, কিন্তু প্রত্যাশিত লাভ নেতিবাচক?

মোমোক্স@zero ছবিতে দেখানো হয়েছে যে, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত, প্রতিবারের মত। https://dn-filebox.qbox.me/e5d9e9be02f4545b3f75d4cb14f911045afe850f.png

মোমোক্স@জিরো, আমি জানতে চাই, কেন দ্বিতীয়বারের মত বাজার মূল্য +/- নয়, কিন্তু বর্তমান খরচ +/- হয়, সেটা কি ইচ্ছাকৃত নাকি ভুল?

শূন্যবিজয় হার হল শুধুমাত্র ট্রেড করার পরই বিজয় হার গণনা করা যায়। ট্রেডিং না করলেও বাজার মূল্যের ভিত্তিতে লাভের পূর্বাভাস দেওয়া হয়।

মোমোক্সআমি বুঝতে পেরেছি, হ্যাঁ, আমি কিছু সময় ধরে দৌড়েছি, লাভ অস্থির ছিল, আপনি যা বলতে চান তা হ'ল বড় প্রত্যাহার, কীভাবে এটি উন্নত করা যায়, দয়া করে কল করুন, কোনও ধারণা দিন, আমি কিছুটা প্রোগ্রামিং করব, এটি ভাঁজ করতে আগ্রহী।

শূন্যএই কৌশলটি একটি বড় প্রত্যাহার, যা ঘন ঘন বৃদ্ধি পায়।

শূন্যএটি হ'ল ব্যয় মূল্য, যা সঞ্চয় করার ব্যয়কে কঠোরভাবে নিয়ন্ত্রণ করার জন্য।