[TOC]

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

প্লাগ-ইন অপারেশনের জন্য দুটি মোড আছে, তাৎক্ষণিক অপারেশন এবং ব্যাকগ্রাউন্ড অপারেশন। ব্যাকগ্রাউন্ডে চালানো একটি বট তৈরির সমতুল্য (সাধারণ চার্জ প্রযোজ্য)। অবিলম্বে কার্যকর করার নীতিটি ডিবাগিং টুলের মতই: এক্সিকিউশনের জন্য ট্রেডিং টার্মিনাল পৃষ্ঠার কাস্টডিয়ানকে কোডের একটি অংশ পাঠান এবং রিটার্নিং চার্ট এবং টেবিল সমর্থন করুন (ডিবাগিং টুলটি বর্তমানে সমর্থনে আপগ্রেড করা হয়েছে) কোন চার্জ বা সীমা ছাড়াই শুধুমাত্র 5 মিনিটের জন্য কার্যকর করা যেতে পারে। একটি সংক্ষিপ্ত এক্সিকিউশন টাইম সহ প্লাগ-ইনগুলি তাৎক্ষণিক রান মোড ব্যবহার করতে পারে, কিন্তু জটিল কৌশলগুলি যেগুলি চালানোর জন্য দীর্ঘ সময় লাগে এখনও রোবটকে চালাতে হবে৷
একটি কৌশল লেখার সময়, আপনাকে প্লাগ-ইন হিসাবে কৌশল প্রকার নির্বাচন করতে হবে। প্লাগ-ইন এর প্রধান ফাংশন দ্বারা প্রত্যাবর্তিত ফলাফল অপারেশন সম্পন্ন হওয়ার পরে টার্মিনালে পপ আপ হবে এটি স্ট্রিং, অঙ্কন এবং টেবিল সমর্থন করে। কারণ প্লাগ-ইন চালানোর সময় লগ দেখা যায় না, প্লাগ-ইন কার্যকর করার ফলাফল ফেরত দেওয়া যেতে পারে।
দেখানো হিসাবে সরাসরি অনুসন্ধান বাক্সে অনুসন্ধান করুন।মনে রাখবেন যে শুধুমাত্র ট্রেডিং প্লাগ-ইন টাইপ কৌশল চালানো যেতে পারে, তারপর Add এ ক্লিক করুন। পাবলিক প্লাগ-ইনগুলি স্ট্র্যাটেজি স্কোয়ারে পাওয়া যাবে: https://www.fmz.com/square/21/1

প্যারামিটার সেটিং ইন্টারফেস প্রবেশ করার জন্য কৌশলটি ক্লিক করুন, এটি সরাসরি চালানো হবে ট্রেডিং টার্মিনাল দ্বারা নির্বাচিত রক্ষক, ট্রেডিং পেয়ার এবং কে-লাইন চক্রটি ডিফল্ট সংশ্লিষ্ট প্যারামিটার। মৃত্যুদন্ড শুরু করতে কার্যকরী কৌশলটিতে ক্লিক করুন এবং “তাত্ক্ষণিকভাবে কার্যকর করুন” মোড নির্বাচন করুন (ডিফল্ট অপারেশন মোডটি মনে রাখা যেতে পারে)। প্লাগইন লগ প্রদর্শন করে না।

প্লাগ-ইন বন্ধ করতে আইকন অবস্থানে ক্লিক করুন যেহেতু সমস্ত প্লাগ-ইন একটি ডিবাগিং টুল প্রক্রিয়ায় সম্পাদিত হয়, সমস্ত প্লাগ-ইন বন্ধ হয়ে যাবে।

প্লাগ-ইনগুলি নির্দিষ্ট সময়ের জন্য কোড নির্বাহ করতে পারে এবং কিছু সাধারণ ক্রিয়াকলাপ সম্পাদন করতে পারে, অনেক ক্ষেত্রে, লেনদেনের সুবিধার্থে প্লাগ-ইন ব্যবহার করে বারবার ম্যানুয়াল অপারেশনের প্রয়োজন হয়৷ নির্দিষ্ট উদাহরণ নীচে উপস্থাপন করা হবে, এবং প্রদত্ত সোর্স কোড আপনার নিজস্ব কৌশল কাস্টমাইজ করার জন্য একটি রেফারেন্স হিসাবে ব্যবহার করা যেতে পারে।
ফিউচার ইন্টারটেম্পোরাল হেজিং একটি খুব সাধারণ কৌশল যেহেতু ফ্রিকোয়েন্সি খুব বেশি নয়, অনেক লোক এটি নিজে করবে, যার জন্য একটি চুক্তি দীর্ঘ হতে হবে এবং একটি চুক্তি ছোট হতে হবে এবং মূল্য পার্থক্যের প্রবণতা বিশ্লেষণ করা ভাল। আপনার ট্রেডিং টার্মিনালে প্লাগইন ব্যবহার করা আপনার প্রচেষ্টাকে বাঁচাবে।
আন্তঃস্থায়ী মূল্যের পার্থক্য আঁকার জন্য প্রথম যে জিনিসটি প্রবর্তন করা হবে তা হল:
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।

স্প্রেড বিশ্লেষণের মাধ্যমে দেখা যায় যে স্প্রেডটি কনভার্সিং হচ্ছে, যা একটি ত্রৈমাসিক চুক্তিকে সংক্ষিপ্ত করার এবং বর্তমান সপ্তাহের জন্য লম্বা করার সুযোগ যেখানে আপনি এক ক্লিকে হেজিং প্লাগ-ইন ব্যবহার করতে পারেন। এটি স্বয়ংক্রিয়ভাবে আপনাকে ত্রৈমাসিক ছোট করতে এবং সপ্তাহের জন্য দীর্ঘ যেতে সাহায্য করবে, যা বেশ কয়েকটি ম্যানুয়াল অপারেশনের চেয়ে দ্রুত। স্লাইডিং মূল্যের সাথে একই সংখ্যক পজিশন খুলতে হবে . কৌশল অনুলিপি ঠিকানা: 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)
}
}
অনেক ছোট ফাংশন দেখার পর, আপনার নিজের ধারনা থাকা উচিত আপনার নিজের ম্যানুয়াল ট্রেডিংয়ের সুবিধার জন্য একটি প্লাগ-ইনও লিখতে পারেন।