রিসোর্স লোড হচ্ছে... লোডিং...

ট্রেডিং টার্মিনাল প্লাগইন ব্যবহার করে ম্যানুয়াল লেনদেন সহজ

লেখক:ঘাস, তৈরিঃ 2020-02-29 21:04:52, আপডেটঃ 2023-10-12 21:21:40

[TOC]img

জীবনবৃত্তান্ত

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

img

প্লাগইন নীতি

প্লাগ-ইন দুটি মোডে চলতে পারে, তাত্ক্ষণিকভাবে চলতে এবং ব্যাকগ্রাউন্ডে চলতে পারে। ব্যাকগ্রাউন্ডে চলতে রোবট তৈরির সমান ((স্বাভাবিক চার্জ) । তাত্ক্ষণিকভাবে চলার নীতি এবং ডিবাগিং সরঞ্জামগুলি একইঃ একটি কোড পাঠানোর হোস্টের দ্বারা সম্পাদিত হয় যা একটি লেনদেনের টার্মিনাল পৃষ্ঠায় পাঠায় এবং ফিরে আসা চার্ট এবং টেবিলগুলি সমর্থন করে (ডিবাগিং সরঞ্জামগুলি বর্তমানে আপগ্রেড সমর্থিত), একইভাবে কেবল 5 মিনিটের মধ্যে চালিত হয়, কোনও ফি বা কোনও ভাষার সীমাবদ্ধতা নেই। খুব কম সময় চলার প্লাগইনগুলি তাত্ক্ষণিকভাবে চলতে পারে, জটিল, দীর্ঘ চলমান কৌশলগুলি বা রোবট চালানোর প্রয়োজন হয়।

নীতির টাইপটি প্লাগইন হিসেবে নির্বাচন করা প্রয়োজন।প্লাগইন এর main ফাংশন return এর ফলাফলটি চালানোর পর টার্মিনালে পপ আপ হয়, যা স্ট্রিং, গ্রাফ এবং টেবিলকে সমর্থন করে। প্লাগইন এক্সিকিউশন লগ দেখতে না পারায়, প্লাগইন এর এক্সিকিউশন ফলাফল return ফিরিয়ে দিতে পারে।

ব্যবহার

  • 1.添加策略

আপনি যদি সরাসরি অনুসন্ধান বাক্সে অনুসন্ধান করেন, তাহলে আপনি দেখতে পাবেন যে এটি একটি খুব সহজ কাজ।মনে রাখবেন যে শুধুমাত্র লেনদেন প্লাগইন টাইপ নীতিগুলি চালানো যাবে, এবং তারপর Add ক্লিক করুন. Open Plugin টি Strategy Square এ পাওয়া যাবেঃhttps://www.fmz.com/square/21/1

img img

  • 2.运行插件

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

img

  • 3.停止插件

প্রদর্শিত অবস্থানের উপর ক্লিক করলে প্লাগইনটি বন্ধ হয়ে যাবে, কারণ সমস্ত প্লাগইন একটি ডিবাগিং সরঞ্জাম প্রক্রিয়ার মধ্যে সম্পাদিত হয়।

img

প্লাগইন ব্যবহারের উদাহরণ

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

সহায়ক ম্যানুয়াল ফিউচার ক্রস-টার্ম হেজিং

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

প্রথমত, একটি পেইন্টিং ক্রস-টার্ম ডিফারেনশিয়াল প্লাগইনঃ

var chart = { 
   __isStock: true,    
   title : { text : '差价分析图'},                     
   xAxis: { type: 'datetime'},                 
   yAxis : {                                        
       title: {text: '差价'},                   
       opposite: false,                             
   },
   series : [                    
       {name : "diff", data : []}, 

   ]
}
function main() {
   exchange.SetContractType('quarter')
   var recordsA = exchange.GetRecords(PERIOD_M5) //周期可以自行定制
   exchange.SetContractType('this_week')
   var recordsB = exchange.GetRecords(PERIOD_M5)
   
   for(var i=0;i<Math.min(recordsA.length,recordsB.length);i++){
       var diff = recordsA[recordsA.length-Math.min(recordsA.length,recordsB.length)+i].Close - recordsB[recordsB.length-Math.min(recordsA.length,recordsB.length)+i].Close
       chart.series[0].data.push([recordsA[recordsA.length-Math.min(recordsA.length,recordsB.length)+i].Time, diff])
   }
   return chart
}

এই প্লাগইনটির মূল কোড কপি করার জন্য, ক্লিক করুন এবং সাম্প্রতিক ক্রস-টার্ম পার্থক্যগুলি দেখুনঃhttps://www.fmz.com/strategy/187755 img

পার্থক্য বিশ্লেষণের সাথে, পার্থক্যটি ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে ঘনিষ্ঠভাবে।https://www.fmz.com/strategy/191348

function main(){
    exchange.SetContractType(Reverse ? Contract_B : Contract_A)
    var ticker_A = exchange.GetTicker()
    if(!ticker_A){return 'Unable to get quotes'}
    exchange.SetDirection('buy')
    var id_A = exchange.Buy(ticker_A.Sell+Slip, Amount)
    exchange.SetContractType(Reverse ? Contract_B : Contract_A)
    var ticker_B = exchange.GetTicker()
    if(!ticker_B){return 'Unable to get quotes'}
    exchange.SetDirection('sell')
    var id_B = exchange.Sell(ticker_B.Buy-Slip, Amount)
    if(id_A){
        exchange.SetContractType(Reverse ? Contract_B : Contract_A)
        exchange.CancelOrder(id_A)
    }
    if(id_B){
        exchange.SetContractType(Reverse ? Contract_B : Contract_A)
        exchange.CancelOrder(id_B)
    }
    return 'Position: ' + JSON.stringify(exchange.GetPosition())
}

দামের ঘনিষ্ঠতার জন্য অপেক্ষা করুন, সমতলকরণের প্রয়োজন, একটি বোতাম সমতলকরণ প্লাগইন চালাতে পারেন, দ্রুততম গতি সমতলকরণ।


function main(){
    while(ture){
        var pos = exchange.GetPosition()
        var ticker = exchange.GetTicekr()
        if(!ticker){return '无法获取ticker'}
        if(!pos || pos.length == 0 ){return '已无持仓'}
        for(var i=0;i<pos.length;i++){
            if(pos[i].Type == PD_LONG){
                exchange.SetContractType(pos[i].ContractType)
                exchange.SetDirection('closebuy')
                exchange.Sell(ticker.Buy, pos[i].Amount - pos[i].FrozenAmount)
            }
            if(pos[i].Type == PD_SHORT){
                exchange.SetContractType(pos[i].ContractType)
                exchange.SetDirection('closesell')
                exchange.Buy(ticker.Sell, pos[i].Amount - pos[i].FrozenAmount)
            }
        }
        var orders = exchange.Getorders()
        Sleep(500)
        for(var j=0;j<orders.length;j++){
            if(orders[i].Status == ORDER_STATE_PENDING){
                exchange.CancelOrder(orders[i].Id)
            }
        }
    }
}

সাহায্যকারী ডেলিভারি

সর্বাধিক সাধারণ হ'ল হিমশৈল কমিশন, বড় ফাইলগুলিকে ছোট বাক্সে বিভক্ত করা, যদিও এটি রোবট হিসাবে চালিত হতে পারে তবে 5 মিনিটের প্লাগইনটি আসলে যথেষ্ট। হিমশৈল কমিশন দুটি ধরণের রয়েছে, একটি হ'ল একক খাওয়ার, অন্যটি হ্যান্ডলিং, যদি কোনও পদ্ধতির ফি ছাড় থাকে তবে আপনি হ্যান্ডলিং বাছাই করতে পারেন, অর্থাৎ আরও বেশি সময় সম্পাদন করতে হবে।

নীচের কোডটি হ'ল হিমশৈলকে প্লাগইনটির উত্স কোড কেনার জন্য অর্ডার করাঃhttps://www.fmz.com/strategy/191771❖ সোর্স কোড বিক্রিঃhttps://www.fmz.com/strategy/191772

function main(){
    var initAccount = _C(exchange.GetAccount)
    while(true){
        var account = _C(exchange.GetAccount)
        var dealAmount = account.Stocks - initAccount.Stocks
        var ticker = _C(exchange.GetTicker)
        if(BUYAMOUNT - dealAmount >= BUYSIZE){
            var id = exchange.Buy(ticker.Sell, BUYSIZE)
            Sleep(INTERVAL*1000)
            if(id){
                exchange.CancelOrder(id) // May cause error log when the order is completed, which is all right.
            }else{
                throw 'buy error'
            }
        }else{
            account = _C(exchange.GetAccount)
            var avgCost = (initAccount.Balance - account.Balance)/(account.Stocks - initAccount.Stocks)
            return 'Iceberg order to buy is done, avg cost is '+avgCost
        }
        
    }
}

একের পর এক কেনা বা বিক্রি করাও একটি ধীরগতির শিপিংয়ের উপায়, যা বাজারে কম প্রভাব ফেলে। এই কৌশলটিতে কিছু উন্নতি রয়েছে, যেখানে আপনি ম্যানুয়ালি সর্বনিম্ন পরিমাণ বা নির্ভুলতা পরিবর্তন করতে পারেন। ক্রয়ঃhttps://www.fmz.com/strategy/191582বিক্রয়ঃhttps://www.fmz.com/strategy/191730

function GetPrecision(){
    var precision = {price:0, amount:0}
    var depth = exchange.GetDepth()
    for(var i=0;i<exchange.GetDepth().Asks.length;i++){
        var amountPrecision = exchange.GetDepth().Asks[i].Amount.toString().indexOf('.') > -1 ? exchange.GetDepth().Asks[i].Amount.toString().split('.')[1].length : 0
        precision.amount = Math.max(precision.amount,amountPrecision)
        var pricePrecision = exchange.GetDepth().Asks[i].Price.toString().indexOf('.') > -1 ? exchange.GetDepth().Asks[i].Price.toString().split('.')[1].length : 0
        precision.price = Math.max(precision.price,pricePrecision)
    }
    return precision
}

function main(){
    var initAccount = exchange.GetAccount()
    if(!initAccount){return '无法获取账户信息'}
    var precision = GetPrecision()
    var buyPrice = 0
    var lastId = 0
    var done = false
    while(true){
        var account = _C(exchange.GetAccount)
        var dealAmount = account.Stocks - initAccount.Stocks
        var ticker = _C(exchange.GetTicker)
        if(BuyAmount - dealAmount > 1/Math.pow(10,precision.amount) && ticker.Buy > buyPrice){
            if(lastId){exchange.CancelOrder(lastId)}
            var id = exchange.Buy(ticker.Buy, _N(BuyAmount - dealAmount,precision.amount))
            if(id){
                lastId = id
            }else{
                done = true
            }
        }
        if(BuyAmount - dealAmount <= 1/Math.pow(10,precision.amount)){done = true}
        if(done){
            var avgCost = (initAccount.Balance - account.Balance)/dealAmount
            return 'order is done, avg cost is ' + avgCost  // including fee cost
        }
        Sleep(Intervel*1000)
    }
}

কখনও কখনও একটি ভাল শিপিং মূল্য বিক্রি করতে বা একটি ফাঁস হওয়ার অপেক্ষায় থাকা অর্ডারের জন্য, নির্দিষ্ট ব্যবধানে একাধিক অর্ডার ঝুলানো যেতে পারে। এই প্লাগইনটি ফিউচার ঝুলানো অর্ডারের জন্যও ব্যবহার করা যেতে পারে। উৎস কপি ঠিকানাঃhttps://www.fmz.com/strategy/190017


function main() {
    var ticker = exchange.GetTicker()
    if(!ticker){
        return  'Unable to get price'
    }
    for(var i=0;i<N;i++){
        if(Type == 0){
            if(exchange.GetName().startsWith('Futures')){
                exchange.SetDirection('buy')
            }
            exchange.Buy(Start_Price-i*Spread,Amount+i*Amount_Step)
        }else if(Type == 1){
            if(exchange.GetName().startsWith('Futures')){
                exchange.SetDirection('sell')
            }
            exchange.Sell(Start_Price+i*Spread,Amount+i*Amount_Step)
        }else if(Type == 2){
            exchange.SetDirection('closesell')
            exchange.Buy(Start_Price-i*Spread,Amount+i*Amount_Step)
        }
        else if(Type == 3){
            exchange.SetDirection('closebuy')
            exchange.Sell(Start_Price+i*Spread,Amount+i*Amount_Step)
        }
        Sleep(500)
    }
    return 'order complete'
}

সহায়ক পণ্যের ফিউচার ট্রেডিং

সাধারণভাবে ব্যবহৃত ফিউচার ট্রেডিং সফটওয়্যার প্রায়শই অনেকগুলি উন্নত লিঙ্কডন বৈশিষ্ট্য রয়েছে, যেমন লিঙ্কডন স্টপ লস লিঙ্ক, লিঙ্কডন শর্তাদি ইত্যাদি, যা প্লাগইন হিসাবে লিখতে সুবিধাজনক। এখানে একটি লিঙ্কডন ট্রেড করার পরে তাত্ক্ষণিকভাবে লিঙ্কডন স্থির করার প্লাগইনটি ভাগ করুন। কপি ঠিকানাঃhttps://www.fmz.com/strategy/187736

var buy = false
var trade_amount = 0
function main(){
    while(true){
        if(exchange.IO("status")){
            exchange.SetContractType(Contract)
            if(!buy){
                buy = true
                if(Direction == 0){
                    exchange.SetDirection('buy')
                    exchange.Buy(Open_Price, Amount)
                }else{
                    exchange.SetDirection('sell')
                    exchange.Sell(Open_Price, Amount)
                }
            }
            var pos = exchange.GetPosition()
            if(pos && pos.length > 0){
                for(var i=0;i<pos.length;i++){
                    if(pos[i].ContractType == Contract && pos[i].Type == Direction && pos[i].Amount-pos[i].FrozenAmount>0){
                        var cover_amount = math.min(Amount-trade_amount, pos[i].Amount-pos[i].FrozenAmount)
                        if(cover_amount >= 1){
                            trade_amount += cover_amount
                            if(Direction == 0){
                                exchange.SetDirection('closebuy_today')
                                exchange.Sell(Close_Price, cover_amount)
                            }else{
                                exchange.SetDirection('closesell_today')
                                exchange.Buy(Close_Price, cover_amount)
                            }
                        }
                    }
                }
            }
        } else {
            LogStatus(_D(), "未连接CTP !")
            Sleep(10000)
        }
        if(trade_amount >= Amount){
            Log('任务完成')
            return
        }
        Sleep(1000)
    }
}

সংক্ষিপ্তসার

এই ছোট্ট বৈশিষ্ট্যগুলি দেখে, আপনারও নিজের ধারণা থাকা উচিত, কেন আপনি নিজের ম্যানুয়াল লেনদেনের জন্য একটি প্লাগইন লিখবেন না?


সম্পর্কিত

আরো

শায়মজানভুল রিপোর্টের কারণ কী? Error: Futures_OP 0: 400: {"error_message":"Open orders exist","code":35017,"error_code":"35017","message":"Open orders exist"} Buy ((5000, 0.1): 400: {"error_message":"order_size error","result":"true","error_code":"35063","order_id":"-1"}

ঘাসএক্সচেঞ্জ ডকুমেন্টেশন চেক করুন অথবা এক্সচেঞ্জ গ্রাহক সেবা দেখুন