拉贾德兰R 市场电话的创始人和联合创始人Algomojo。全职衍生品交易员。交易系统设计专家(Amibroker,Ninjatrader,Metatrader,Python,Pinescript)。自2006年开始交易市场。指导交易员进行交易系统设计,市场概况,订单流和交易自动化。

多腿期权执行– 阿米经纪人 Module –按钮式交易

8分钟阅读

本教程为您提供了一个用于发送多腿期权模块的基本框架,以及如何使用一个简单的基于按钮交易的示例退出多腿期权模块。但是,该模块可以扩展为使用Amibroker进行任何中立交易策略的交易。

该按钮交易模块还提供优先权,以执行多头期权定单,然后执行期权卖出定单,以根据 新的衍生品保证金框架.

支持的经纪人 :Aliceblue,Tradejini,Zebu

支持的Amibroker版本 :Amibroker版本6.22以上

支持的Algomojo API版本:1.0

如果您不熟悉选项执行模块,请通过以下基础教程快速启动 使用Algomojo平台从Amibroker发送期权定单

如果您要根据期货/现货的信号从Amibroker发送单边期权定单,请从 使用Algomojo平台从Amibroker中的期货或现货信号发送期权定单

要建立按钮交易模块,我们需要2个主要组件

1)标头选项执行模块,需要将其放置在 阿米经纪人 \ Formulas \ Include folder

2)需要在空白图表上拖放的主选项进入/退出按钮执行模块

1)Header多腿期权执行Module

将页眉多腿执行模块复制到 阿米经纪人 \ Formulas \ include 夹。以名称保存AFL algomojomultioptions.afl

//////////////////////////////////////////////
//Multi Broker 阿米经纪人 Option Execution Module
//Coded by Rajandran - Algomojo Co-Founder
//Date : 30/12/2020
//////////////////////////////////////////////



//Use this code only for Single Legged Long Only Options and Exiting Long Only Options


_SECTION_BEGIN("Algomojo Multi legged Options");


uid = ParamStr("Client ID","TS2499");
user_apikey = ParamStr("user_apikey","86cbef19e7e61ccee91e497690d5814e"); //Enter your API key here
api_secret = ParamStr("api_secret","4a94db82ea4fa140afaa2f039efffd18"); //Enter your API secret key here
s_prdt_ali = "BO:BO||CNC:CNC||CO:CO||MIS:MIS||NRML:NRML";
prctyp = ParamList("prctyp","MKT|L|SL|SL-M",0);
Pcode = ParamList("Pcode","NRML|CO|MIS",2);
Price = ParamList("Price","0");
TrigPrice = ParamList("TrigPrice","0");

stgy_name = ParamStr("Strategy Name", "Options");
broker = ParamStr("Broker","ab"); //Broker Short Code - ab - aliceblue, tj - tradejini, zb - zebu, en - enrich
ver = ParamStr("API Version","1.0");
fpath = ParamStr("Symbol Filepath", "C:\\Program Files (x86)\\AmiBroker\\Formulas\\Algomojo\\");
timer = 1; //3 seconds for providing delay after placing order

RequestTimedRefresh(1,False);


function getnestorderno(response)
{

NOrdNo = "";


if(StrFind(response,"NOrdNo")) //Matches the orderstatus
{
NOrdNo = StrTrim( response, "{\"NOrdNo\":" );
NOrdNo = StrTrim( NOrdNo, "\",\"stat\":\"Ok\"}" );
}

return NOrdNo;
}

function getorderhistory(orderno)
{

algomojo=CreateObject("AMAMIBRIDGE.Main");
api_data = "{\"uid\":\""+uid+"\",\"NOrdNo\":\""+orderno+"\",\"s_prdt_ali\":\""+s_prdt_ali+"\"}";
resp=algomojo.AMDispatcher(user_apikey, api_secret,"OrderHistory",api_data,broker,ver);

return resp;


}


function getsymbol(orderno)
{

ordresp = getorderhistory(orderno);

data = "";
Trsym="";

for( item = 0; ( sym = StrExtract( ordresp, item,'{' )) != ""; item++ )
{

sym = StrTrim(sym," "); //Trim Whitespaces




if(StrFind(sym,"complete") OR StrFind(sym,"rejected")) //Matches the orderstatus
{

flag = 1; //turn on the flag

data = sym;

for( jitem = 0; ( ohistory = StrExtract( data, jitem,',' )) != ""; jitem++ )
{

if(Strfind(ohistory,"Trsym"))
  {
   Trsym = StrExtract(ohistory,1,':');
   Trsym = StrTrim(Trsym,"\"");
   
  }

}

}

}

return Trsym;

}

function getorderstatus(orderno)
{
orderstatus="";
ordresp = getorderhistory(orderno);

data = "";

for( item = 0; ( sym = StrExtract( ordresp, item,'{' )) != ""; item++ )
{

sym = StrTrim(sym," "); //Trim Whitespaces


if(StrFind(sym,"complete") OR StrFind(sym,"rejected")) //Matches the orderstatus
{

flag = 1; //turn on the flag

data = sym;

for( jitem = 0; ( ohistory = StrExtract( data, jitem,',' )) != ""; jitem++ )
{

if(Strfind(ohistory,"Status"))
  {
   orderstatus = StrExtract(ohistory,1,':');
   orderstatus = StrTrim(orderstatus,"\"");
   
  }

}

}

}

return orderstatus;
}//end function


function gettoken(symbol)
{
stoken="";
algomojo=CreateObject("AMAMIBRIDGE.Main");
api_data = "{\"s\":\""+symbol+"\"}";
resp=algomojo.AMDispatcher(user_apikey, api_secret,"fetchsymbol",api_data,broker,ver);

for( item = 0; ( sym = StrExtract( resp, item,'{' )) != ""; item++ )
{

sym = StrTrim(sym," "); //Trim Whitespaces

data = sym;

for( jitem = 0; ( ofetch = StrExtract( data, jitem,',' )) != ""; jitem++ )
{

if(Strfind(ofetch,"symbol_token"))
  {
   stoken = StrExtract(ofetch,1,':');
   stoken = StrTrim(stoken,"\"");
   
  }

}

}
return stoken;
}

function writetofile(filepath,ordno,symbol,ostatus)
{
    result =0;
	if(ostatus=="complete" OR ostatus=="rejected")
	{
    fh = fopen( filepath, "w"); //Filepath of csv file with symbols
	if(fh)
    {
		
		fputs(ordno + ",", fh);
		fputs(symbol + ",", fh);
		fputs(ostatus+",", fh);
		fclose(fh);
		result =1;
    } 
    }
    
    return result; 
}

function placeoptionorder(spot_sym,expiry_dt,strike_int,qty,Ttranstype,opt,off,leg)
{

algomojo=CreateObject("AMAMIBRIDGE.Main");
api_data = "{\"strg_name\":\""+stgy_name+"\",\"spot_sym\":\""+spot_sym+"\",\"expiry_dt\":\""+expiry_dt+"\",\"opt_type\":\""+opt+"\",\"Ttranstype\":\""+Ttranstype+"\",\"prctyp\":\""+prctyp+"\",\"qty\":\""+qty+"\",\"Price\":\""+Price+"\",\"TrigPrice\":\""+TrigPrice+"\",\"Pcode\":\""+Pcode+"\",\"strike_int\":\""+strike_int+"\",\"offset\":\""+off+"\"}";
resp=algomojo.AMDispatcher(user_apikey, api_secret,"PlaceFOOptionsOrder",api_data,broker,ver);
_TRACE("\n"+api_data);
//Get Nest Order Number
nestorderno = getnestorderno(resp);
_TRACE("\nNest Order No : "+nestorderno);

tradetime=GetPerformanceCounter()/1000; 

while ((GetPerformanceCounter()/1000 - tradetime) < timer)
{            

//Get Trading Symbol
Tsym = getsymbol(nestorderno);
}
_TRACE("\nTrading Symbol : "+Tsym);

//Get Order Status
orderstatus = getorderstatus(nestorderno);
_TRACE("\nOrder Status : "+orderstatus);
//Get Token Number
//token = gettoken(Tsym);
//_TRACE("\nSymbol Token : "+token);
if(opt=="CE")
{
path = fpath+leg+"AlgomojoCE.csv";
}
if(opt=="PE")
{
path = fpath+leg+"AlgomojoPE.csv";
}

writestatus = writetofile(path,nestorderno,Tsym,orderstatus);
_TRACEF(WriteIf(writestatus,"\nWriting to File - Success","\nWriting to File - Failure"));
//resp = resp+"\nNest Order No : "+nestorderno+"\nTrading Symbol : "+Tsym+"\nOrder Status : "+orderstatus+"\nSymbol Token : "+token;
return Tsym;

}


function getquantity(Tsym)
{

algomojo=CreateObject("AMAMIBRIDGE.Main");
api_data ="{\"uid\":\""+uid+"\",\"actid\":\""+uid+"\",\"type\":\""+"DAY"+"\",\"s_prdt_ali\":\""+s_prdt_ali+"\"}";
resp=algomojo.AMDispatcher(user_apikey, api_secret,"PositionBook",api_data,broker,ver);

//Initialization
flag = 0;
possym = "";
posNetqty =0;


for( item = 0; ( sym = StrExtract( resp, item,'{' )) != ""; item++ )
{

sym = StrTrim(sym," ");
Tsym = StrTrim(Tsym," ");

if(Strfind(sym,Tsym) AND StrFind(sym,Pcode)) //Matches the symbol and //Matches the Order Type
{

flag = 1; //turn on the flag

data = sym;

_TRACE(" Position Book  : " +data);

for( jitem = 0; ( posdetails = StrExtract( data, jitem,',' )) != ""; jitem++ )
{

  if(Strfind(posdetails,"Netqty"))
  {
   posdetails = StrExtract(posdetails,1,':');
   posNetqty = StrToNum(StrTrim(posdetails,"\""));
   _TRACE("\nNetQty : "+posNetqty);
  }
  

} //end of for loop
}

}//end of for loop

if(flag==0)
{
_TRACE("\nTrading Symbol Not Found");
}

return posNetqty;

}


function squareoffoptions(opt,Ttranstype,leg)
{

ttype="";

if(Ttranstype=="B")
{

ttype = "S";

}

if(Ttranstype=="S")
{

ttype = "B";

}


ordno = "";
Symbol = "";
ostatus ="";

	if(opt=="CE")
	{
	fpath = fpath+leg+"AlgomojoCE.csv";
	}
	if(opt=="PE")
	{
	fpath = fpath+leg+"AlgomojoPE.csv";
	}
	
	fh = fopen(fpath, "r"); 
	if(fh)
	{
		
		read = fgets(fh);
		ordno = StrTrim(StrExtract(read,0)," ");
		Symbol = StrTrim(StrExtract(read,1)," ");
		ostatus = StrTrim(StrExtract(read,2)," ");
					
		fclose(fh);
	}
	
	exitqty = getquantity(Symbol);
	_TRACE("Net Quantity in the OrderBook for the Symbol : "+Symbol+" is : "+exitqty);
	
	if(ostatus=="complete" AND exitqty!=0)
	{
	algomojo=CreateObject("AMAMIBRIDGE.Main");
	api_data = "{\"strg_name\":\""+stgy_name+"\",\"s_prdt_ali\":\""+s_prdt_ali+"\",\"Tsym\":\""+Symbol+"\",\"exch\":\""+"NFO"+"\",\"Ttranstype\":\""+ttype+"\",\"Ret\":\""+"DAY"+"\",\"prctyp\":\""+prctyp+"\",\"qty\":\""+exitqty+"\",\"discqty\":\""+"0"+"\",\"MktPro\":\""+"NA"+"\",\"Price\":\""+"0"+"\",\"TrigPrice\":\""+"0"+"\",\"Pcode\":\""+Pcode+"\",\"AMO\":\""+"NO"+"\"}";
	resp=algomojo.AMDispatcher(user_apikey, api_secret,"PlaceOrder",api_data,broker,ver);
	//Get Nest Order Number
	nestorderno = getnestorderno(resp);
	_TRACE("\nNest Order No : "+nestorderno);

	tradetime=GetPerformanceCounter()/1000; 

	while ((GetPerformanceCounter()/1000 - tradetime) < timer)
	{            

	//Get Trading Symbol
	Tsym = getsymbol(nestorderno);
	}
	_TRACE("\nTrading Symbol : "+Tsym);

	//Get Order Status
	orderstatus = getorderstatus(nestorderno);
	_TRACE("\nOrder Status : "+orderstatus);
	
	}
	else
	{
	
	resp = "不平方。没有未平仓交易或上一个信号状态未处于完成状态";
	
	}
	
	return resp;
}
_SECTION_END();

2)主要选项Enty / Exit按钮执行模块

将主执行模块复制到Amibroker \ Formulas \ Algomojo平台。以名称保存AFL Algomojo按钮交易多腿期权.afl

现在,使用买/卖交易系统将模块拖放到图表顶部

/*
Created By : 拉贾德兰R(Founder - 市场电话/ Co-Founder Algomojo)
Created on : 01 Apr 2020.
Website : www.marketcalls.in
*/

#include < algomojomultioptions.afl >


_SECTION_BEGIN("Button Trading - Multi Broker - Algomojo");

//Notes
//This afl code works only on 阿米经纪人 6.22 and higher version
//Requires Algomojo Trading account
//Replace the API Key and API Secrety key with yours

Version(6.22);

RequestTimedRefresh(1, False); // Send orders even if 阿米经纪人 is minimized or Chart is not active

spot_sym = ParamStr("spot_sym","NIFTY"); //Enter the symbol name here
strike_int = ParamStr("strike_int","50");
lotsize = Param("Symbol Lot Size",75,1,50000);

leg1 = ParamToggle("1st Leg","Disable|Enable");
leg1expiry_dt = ParamStr("Leg 1 expiry_dt", "21年1月28日");
leg1qty = Param("Leg 1 Lot Size",1)*lotsize;
leg1Ttranstype = ParamList("Leg 1 Transaction Type","B|S");
leg1opt_type = ParamList("Leg 1 Option Type","CE|PE",0);
leg1offset = ParamStr("Leg 1 Offset","0"); 

leg2 = ParamToggle("2ng Leg","Disable|Enable");
leg2expiry_dt = ParamStr("Leg 2 expiry_dt", "21年1月28日");
leg2qty = Param("Leg 2 Lot Size",1)*lotsize;
leg2Ttranstype = ParamList("Leg 2 Transaction Type","B|S");
leg2opt_type = ParamList("Leg 2 Option Type","CE|PE",0);
leg2offset = ParamStr("Leg 2 Offset","0"); 


leg3 = ParamToggle("3rd Leg","Disable|Enable");
leg3expiry_dt = ParamStr("Leg 3 expiry_dt", "21年1月28日");
leg3qty = Param("Leg 3 Lot Size",1)*lotsize;
leg3Ttranstype = ParamList("Leg 3 Transaction Type","B|S");
leg3opt_type = ParamList("Leg 3 Option Type","CE|PE",0);
leg3offset = ParamStr("Leg 3 Offset","0"); 

leg4 = ParamToggle("4th Leg","Disable|Enable");
leg4expiry_dt = ParamStr("Leg 4 expiry_dt", "21年1月28日");
leg4qty = Param("Leg 4 Lot Size",1)*lotsize;
leg4Ttranstype = ParamList("Leg 4 Transaction Type","B|S");
leg4opt_type = ParamList("Leg 4 Option Type","CE|PE",0);
leg4offset = ParamStr("Leg 4 Offset","0"); 


tradedelay = Param("Trade Delay",0);
EnableAlgo = ParamList("Algo Mode","Disable|Enable",0); // Algo Mode


static_name_ = Name()+GetChartID()+interval(2)+stgy_name;
static_name_algo = Name()+GetChartID()+interval(2)+stgy_name+"algostatus";
//StaticVarSet(static_name_algo, -1); 
GfxSelectFont( "BOOK ANTIQUA", 14, 100 );
GfxSetBkMode( 1 );
if(EnableAlgo == "Enable")
{
AlgoStatus = "Algo Enabled";
GfxSetTextColor( colorGreen ); 
GfxTextOut( "Algostatus : "+AlgoStatus , 20, 40); 
if(Nz(StaticVarGet(static_name_algo),0)!=1)
{
_TRACE("Algo Status : Enabled");
StaticVarSet(static_name_algo, 1);
}
}
if(EnableAlgo == "Disable")
{
AlgoStatus = "Algo Disabled";
GfxSetTextColor( colorRed ); 
GfxTextOut( "Algostatus : "+AlgoStatus , 20, 40); 
if(Nz(StaticVarGet(static_name_algo),0)!=0)
{
_TRACE("Algo Status : Disabled");
StaticVarSet(static_name_algo, 0);
}
}
if(EnableAlgo == "LongOnly")
{
AlgoStatus = "Long Only";
GfxSetTextColor( colorYellow ); 
GfxTextOut( "Algostatus : "+AlgoStatus , 20, 40); 
if(Nz(StaticVarGet(static_name_algo),0)!=2)
{
_TRACE("Algo Status : Long Only");
StaticVarSet(static_name_algo, 2);
}
}
if(EnableAlgo == "ShortOnly")
{
AlgoStatus = "Short Only";
GfxSetTextColor( colorYellow ); 
GfxTextOut( "Algostatus : "+AlgoStatus , 20, 40); 
if(Nz(StaticVarGet(static_name_algo),0)!=3)
{
_TRACE("Algo Status : Short Only");
StaticVarSet(static_name_algo, 3);
}
}



resp = "";




function Buyorder()
{

//Managing the efficient Margin according to new margin regulations. Giving Priority for Long Options first followed by option short positions
	if(leg1 AND leg1Ttranstype=="B")
	{
    leg1response = placeoptionorder(spot_sym,leg1expiry_dt,strike_int,leg1qty,leg1Ttranstype,leg1opt_type,leg1offset,1);
    _TRACE("Leg 1 Buy Order Placed Successfully");
    }
    if(leg2 AND leg2Ttranstype=="B")
	{
    leg2response = placeoptionorder(spot_sym,leg2expiry_dt,strike_int,leg2qty,leg2Ttranstype,leg2opt_type,leg2offset,2);
    _TRACE("Leg 2 Buy Order Placed Successfully");
    }
    if(leg3  AND leg3Ttranstype=="B")
	{
    leg3response = placeoptionorder(spot_sym,leg3expiry_dt,strike_int,leg3qty,leg3Ttranstype,leg3opt_type,leg3offset,3);
    _TRACE("Leg 3 Buy Order Placed Successfully");
    }
    if(leg4  AND leg4Ttranstype=="B")
	{
    leg4response = placeoptionorder(spot_sym,leg4expiry_dt,strike_int,leg4qty,leg4Ttranstype,leg4opt_type,leg4offset,4);
    _TRACE("Leg 4 Buy Order Placed Successfully");
    }
    
    
    if(leg1 AND leg1Ttranstype=="S")
	{
    leg1response = placeoptionorder(spot_sym,leg1expiry_dt,strike_int,leg1qty,leg1Ttranstype,leg1opt_type,leg1offset,1);
    _TRACE("Leg 1 Sell Order Placed Successfully");
    }
    if(leg2 AND leg2Ttranstype=="S")
	{
    leg2response = placeoptionorder(spot_sym,leg2expiry_dt,strike_int,leg2qty,leg2Ttranstype,leg2opt_type,leg2offset,2);
    _TRACE("Leg 2 Sell Order Placed Successfully");
    }
    if(leg3  AND leg3Ttranstype=="S")
	{
    leg3response = placeoptionorder(spot_sym,leg3expiry_dt,strike_int,leg3qty,leg3Ttranstype,leg3opt_type,leg3offset,3);
    _TRACE("Leg 3 Sell Order Placed Successfully");
    }
    if(leg4  AND leg4Ttranstype=="S")
	{
    leg4response = placeoptionorder(spot_sym,leg4expiry_dt,strike_int,leg4qty,leg4Ttranstype,leg4opt_type,leg4offset,4);
    _TRACE("Leg 4 Sell Order Placed Successfully");
    }
        
	Say( "Order Placed" ); 
}

function Sellorder()
{
	if(leg1)
	{
    sqoff1status = squareoffoptions(leg1opt_type,leg1Ttranstype,1);
	_TRACE("Leg 1 Exit Response :"+sqoff1status);
	}
	
	if(leg2)
	{
	sqoff2status = squareoffoptions(leg2opt_type,leg2Ttranstype,2);
	_TRACE("Leg 2 Exit Response :"+sqoff2status);
	}
	if(leg3)
	{
	sqoff3status = squareoffoptions(leg3opt_type,leg3Ttranstype,3);
	_TRACE("Leg 3 Exit Response :"+sqoff3status);
	}
	if(leg4)
	{
	sqoff4status = squareoffoptions(leg4opt_type,leg4Ttranstype,4);
	_TRACE("Leg 4 Exit Response :"+sqoff4status);
	}
	
    _TRACE("Order Placed Successfully");
            
    Say( "Order Placed" );
}

function GuiButtonTrigger( ButtonName, x, y, width, Height ) {
	/// @link http://forum.amibroker.com/t/guibuttons-for-everyone/1716/4
	/// by beaver & fxshrat
	/// version 1.1
	global IDset;
	local id, event, clickeven;
	
	if( typeof( IDset ) == "undefined" ) IDset = 0; 

	//_TRACEF( "IDset before: %g", IDset );	
	GuiButton( ButtonName, ++IDset, x, y, width, height, 7 ); 
	//_TRACEF( "IDset after: %g", IDset );
	result = 0;
	id = GuiGetEvent( 0, 0 );// receiving button id
	event = GuiGetEvent( 0, 1 );// receiving notifyflag
	clickevent = event == 1;
	BuyClicked = id == 1 && clickevent;
	SellClicked = id == 2 && clickevent;
	if( BuyClicked AND StaticVarGet(Name()+GetChartID()+"buyAlgo")==0 ) 
	{
		BuyOrder();
		result = 1;
		StaticVarSet(Name()+GetChartID()+"buyAlgo",1); 
	}
	else
	{
		StaticVarSet(Name()+GetChartID()+"buyAlgo",0);
	}
	if( SellClicked AND StaticVarGet(Name()+GetChartID()+"sellAlgo")==0 ) 
	{
		SellOrder();
		result = -1;
		StaticVarSet(Name()+GetChartID()+"sellAlgo",1); 
	}
	else
	{
		StaticVarSet(Name()+GetChartID()+"sellAlgo",0); 
	}
	return result;
	
}
	
	BuyTrigger = GuiButtonTrigger( "Enter Options", 0, 100, 200, 30 );
	SellTrigger = GuiButtonTrigger( "Exit Options", 200, 100, 200, 30 );
	GuiSetColors( 1, 3, 2, colorRed, colorBlack, colorRed, colorWhite, colorBlue, colorYellow, colorRed, colorBlack, colorYellow ); 

Title = "Trigger: " + WriteIf(BuyTrigger==1,"Buy Triggered",WriteIf(BuyTrigger==-1,"Sell Triggered","0"));

SetChartOptions(0 , chartShowArrows | chartShowDates);
Plot(Close,"Candle", colorDefault, styleCandle);

_SECTION_END();

3)现在,右键单击图表并设置客户端ID,user_apikey,api_secretkey,经纪人并设置所需的数量

4)确保 符号文件路径存在。这是执行的符号CE和PE选项将保存在CSV文件中以供以后平方的路径。

5)启用/禁用多支腿选项,设置交易品种,手数,行使价间隔(两个即时执行价格之间的差),设置多支腿的到期日,手数和偏移量,如下所示

输入期权到期格式时请确保。登录到Algomojo终端,并检查每周和每月的选项格式,并相应地输入到期日期。

对于Aliceblue帐户持有者,每月期权代码格式:NIFTY21JAN14500CE

因此,到期日期需要输入为21JAN

对于Aliceblue帐户持有人,每周期权代码格式:NIFTY2111414500CE

因此,到期日期需要输入为21114

对于Tradejini和Zebu帐户持有者每月期权代码格式: NIFTY28JAN2114500CE

因此,到期日期需要输入为 21年1月28日

对于Tradejini和Zebu帐户持有者每月期权代码格式: NIFTY14JAN2114500CE

因此,到期日期需要输入为 21年1月14日

6)确保打开日志窗口以捕获跟踪日志

7)启用算法模式:启用状态

7)Bingo现在,单击Enter Options,您将能够根据您的设置发送多支腿期权,并且您还可以看到,与短支腿期权相比,多头期权订单在执行中具有优先权,可以有效地管理保证金。

8)在“按退出选项”按钮上,所有多腿期权定单自动被平方。仅当仓位中存在该仓位时,方格才会发生。如果找不到位置,将收到以下日志通知

不平方。没有未平仓交易或上一个信号状态未处于完成状态

通过根据交易商的要求进行定制,可以进一步扩展该模块以自动从Amibroker下达多支腿期权定单。

如果您需要定制的多方选项要求,可以将您的要求发送至[email protected]

拉贾德兰R 市场电话的创始人和联合创始人Algomojo。全职衍生品交易员。交易系统设计专家(Amibroker,Ninjatrader,Metatrader,Python,Pinescript)。自2006年开始交易市场。指导交易员进行交易系统设计,市场概况,订单流和交易自动化。

多腿期权执行– 阿米经纪人 Module – Button…

本教程为您提供了发送多腿选项模块的基本框架,以及如何使用简单按钮退出多腿选项模块...
拉贾德兰R
8分钟阅读

在Algomojo中发送期权定单和退出期权定单…

本教程可帮助您了解期权交易模块以及从Amibroker建立和发送和退出期权定单的要求...
拉贾德兰R
5分钟阅读

[网络研讨会] Upstox用户的Algomojo平台简介

Algomojo是基于经纪人API的基于Web的自动交易平台,具有交易者为交易者构建的简约设计。
拉贾德兰R
读取25秒

发表评论

获取通知,市场更新警报,交易工具,自动化等