

//.cc#通达信期货行情接口,include#通达信期货行情接口,include#include#include#include#include#include#include#include#includenamespacelongbeach{namespacesignals{TradedQuantity::TradedQuantity:m_tradeTime),m_tradedQuantity{boolaverage_price_confirms_buyers=false;boolaverage_price_confirms_sellers=false;if{average_price_confirms_buyers=notional_price.get>last_midprice;average_price_confirms_sellers=notional_price.getgetMidPrice>last_midprice;//boolmidprice_moved_down=book->getMidPrice0){m_smoothExpiryAdjustment=smooth;//std::cout<<"RollingWindow::Expiredebug:expire_adjustment:"<scheduleClockNotice,PRIORITY_SIGNALS_Signal);m_spTickProvider->addTickListener;m_spBook->addBookListener;m_rollingWindows.clear;for;++i){allocState%i));m_rollingWindows.push_back);}}///DestructorSigLastTradedQuantity::~SigLastTradedQuantity{m_spCM->unscheduleClockNotices;m_spTickProvider->removeTickListener;m_spBook->removeBookListener;}voidSigLastTradedQuantity::reset{for;i++)m_rollingWindows[i]->reset;SignalStateImpl::reset);}voidSigLastTradedQuantity::recomputeStateconst{updateState;}voidSigLastTradedQuantity::updateStateconst{m_state.clear;for;i++){doublesignal=m_rollingWindows[i]->getSignal;switch{caseARITH:m_state.push_back;break;caseLOG:doublesigtopush;sigtopush=?0.0:*log));m_state.push_back;break;default:LONGBEACH_THROW_ERROR_SS;break;}}}voidSigLastTradedQuantity::onWakeupCall{//atopen,resetifreset;elseif{//atendofday,scheduleATOPENandnextENDOFDAYstd::vectorcns=cm::getClockNotice,m_instr,m_spCM->getYMDDate,cm::ATOPEN);m_spCM->scheduleClockNotices;cns=cm::getClockNotice,m_instr,m_spCM->getYMDDate,cm::ENDOFDAY);m_spCM->scheduleClockNotices;}}voidSigLastTradedQuantity::onBookChanged{//Bookupdatedfirst,asexpectedm_lastBestBidPrice=m_currentBestBidPrice;m_lastBestAskPrice=m_currentBestAskPrice;m_lastMidPrice=m_currentMidPrice;m_currentBestBidPrice=pBook->getNthSide.getPrice;m_currentBestAskPrice=pBook->getNthSide.getPrice;m_currentMidPrice=pBook->getMidPrice;m_lastBookUpdateTime=pMsg->hdr->time_sent;}voidSigLastTradedQuantity::onTickReceived{m_isOK=m_spBook->isOK&&m_spTickProvider->isLastTickOK;if{//RemoveexpiredTradedQuantitiesconsttimeval_ttrade_time=tick.getMsgTime;//Expectthebooktogetupdatedfirst.doublelast_bid_price=m_lastBestBidPrice;doublelast_ask_price=m_lastBestAskPrice;doublelast_mid_price=m_lastMidPrice;if{//Tickgotupdatedbeforethebooklast_bid_price=m_currentBestBidPrice;last_ask_price=m_currentBestAskPrice;last_mid_price=m_currentMidPrice;}//Checkforinitialconditions//if&&last_ask_price!=0.0)//{////Addnewone.//boost::optionalavg_notional_price;//constShfeTickProvider*shfe_tp=dynamic_cast;//if//avg_notional_price=shfe_tp->getAvgPxInLastTick);//for;i++)//{//m_rollingWindows[i]->update);//}//updateState;//notifySignalListeners;//}//Addnewone.//boost::optionalavg_notional_price;//constShfeTickProvider*shfe_tp=dynamic_cast;//if//avg_notional_price=shfe_tp->getAvgPxInLastTick);boost::optionalavg_notional_price=tp->getAvgPxInLastTick);for;i++)m_rollingWindows[i]->update);updateState;notifySignalListeners;}}BaselineRollingWindow::BaselineRollingWindow:RollingWindow,m_numberOfHistorySamples,m_samplePeriod,m_smoothingFactor,m_smoothedTotalAtStart{//if)//LONGBEACH_THROW_ERROR_SS;m_sampledHistory.clear;m_recentHistory.clear;}voidBaselineRollingWindow::update{timeval_tcurrent_time=traded_quantity.getTradeTime;RollingWindow::update;doublewindow_total=RollingWindow::getSignal;//Keepingdatatobothsampleandgetstatsonlongertermhistory//andtogeneratedeltasversusthebeginningofthecurrentwindow.//Updaterecenthistory:usedtogeneratedeltasversusthebeginningofthecurrentwindow.m_recentHistory.push_back);m_smoothedTotalAtStart=smooth.getTotal,m_smoothingFactor);//Removeolderhistory:onlywanttokeepuptoonelengthworthlongbeach::ptime_duration_ttime_since_first_entry=timeval_diff.getTime);while{m_recentHistory.pop_front;if>0)time_since_first_entry=timeval_diff.getTime);elsetime_since_first_entry=ptime_duration_from_double;}//Updatelonger,sampledhistory:usedtogeneratelongertermstats//Sampleeverycompletewindowlengthbooltake_sample=m_sampledHistory.size==0;if{longbeach::ptime_duration_ttime_since_last_sample=timeval_diff.getTime);take_sample=time_since_last_sample>=m_samplePeriod;}if{m_sampledHistory.push_back);std::cout<<"BaselineRollingWindow::updatetaking_sample:start_time:"<m_numberOfHistorySamples)m_sampledHistory.pop_front;}doubleBaselineRollingWindow::getSignalconst{doubleaverage_magnitude=0.0;BOOST_FOREACH{average_magnitude+=fabs);}//Firstsamplecanbea0entry.Don"twanttoincludethatintheaverage.if>average_magnitude=average_magnitude/double-;doublecurrent_total=RollingWindow::getSignal;//Proxyfor:Detectquickandlargechangerelativetothisbaseline.//Butdirectionalsignalsonlyoccurformovingbigandquicklyawayfromzero.doublesignal=0.0;if>1&&average_magnitude>0.0){doubledelta=current_total-m_smoothedTotalAtStart;signal=delta/average_magnitude;//std::cout<<"BaselineRollingWindow::updatedebug:total:"<getSignal;ifgetSourceTickFactory->getTickProvider,m_tickSource,true);ifLONGBEACH_THROW_ERROR_SS;IBookPtrbook=builder->getBookBuilder->buildBook;returnISignalPtr,m_description,builder->getClientContext,builder->getClockMonitor,m_vWindowDurations,m_expireSmoothingFactor,book,spTP,m_returnMode));}voidSigLastTradedQuantitySpec::checkValidconst{SignalSpec::checkValid;ifLONGBEACH_THROW_ERROR_SS;if)LONGBEACH_THROW_ERROR_SS;if==0)LONGBEACH_THROW_ERROR_SSis0");ifLONGBEACH_THROW_ERROR_SS;}SigLastTradedQuantitySpec*SigLastTradedQuantitySpec::cloneconst{returnnewSigLastTradedQuantitySpec;}voidSigLastTradedQuantitySpec::hashCombineconst{SignalSpec::hashCombine;boost::hash_combine;boost::hash_combine;boost::hash_combine;boost::hash_combine;boost::hash_combine;}boolSigLastTradedQuantitySpec::compareconst{if)returnfalse;constSigLastTradedQuantitySpec*b=dynamic_cast;ifreturnfalse;ifreturnfalse;ifreturnfalse;ifreturnfalse;ifreturnfalse;ifreturnfalse;returntrue;}voidSigLastTradedQuantitySpec::printconst{constLuaPrintSettingsonei=ps.next;//indentationonepastcurrento<<"--SigLastTradedQuantitySpec"<getDataRequirements;//m_inputTickProvider->getDataRequirements;}boolSigLastTradedQuantitySpec::registerScripting{//eachSpecclassmustbeaddedtoregisterScriptinginSignals_Scripting.ccluabind::module[luabind::class_.def).def_readwrite.def_readwrite.def_readwrite.def_readwrite.def_readwrite];returntrue;}/************************************************************************************************///SigBaselineLastTradedQuantitySpec/************************************************************************************************/SigBaselineLastTradedQuantitySpec::SigBaselineLastTradedQuantitySpec:SignalSpec,m_inputBook),m_tickSource,m_vWindowDurations,m_numberOfHistorySamples,m_cutoff,m_windowsToSample,m_expireSmoothingFactor,m_smoothingFactor{}ISignalPtrSigBaselineLastTradedQuantitySpec::buildconst{ITickProviderCPtrspTP=builder->getSourceTickFactory->getTickProvider,m_tickSource,true);ifLONGBEACH_THROW_ERROR_SS;IBookPtrbook=builder->getBookBuilder->buildBook;returnISignalPtr,m_description,builder->getClientContext,builder->getClockMonitor,m_vWindowDurations,m_numberOfHistorySamples,m_windowsToSample,m_cutoff,m_expireSmoothingFactor,m_smoothingFactor,book,spTP));}voidSigBaselineLastTradedQuantitySpec::checkValidconst{SignalSpec::checkValid;ifLONGBEACH_THROW_ERROR_SS;if)LONGBEACH_THROW_ERROR_SS;if==0)LONGBEACH_THROW_ERROR_SSis0");ifLONGBEACH_THROW_ERROR_SS;ifLONGBEACH_THROW_ERROR_SS;ifLONGBEACH_THROW_ERROR_SS;ifLONGBEACH_THROW_ERROR_SS;}SigBaselineLastTradedQuantitySpec*SigBaselineLastTradedQuantitySpec::cloneconst{returnnewSigBaselineLastTradedQuantitySpec;}voidSigBaselineLastTradedQuantitySpec::hashCombineconst{SignalSpec::hashCombine;boost::hash_combine;boost::hash_combine;boost::hash_combine;boost::hash_combine;boost::hash_combine;boost::hash_combine;boost::hash_combine;boost::hash_combine;}boolSigBaselineLastTradedQuantitySpec::compareconst{if)returnfalse;constSigBaselineLastTradedQuantitySpec*b=dynamic_cast;ifreturnfalse;ifreturnfalse;ifreturnfalse;ifreturnfalse;ifreturnfalse;ifreturnfalse;ifreturnfalse;ifreturnfalse;ifreturnfalse;returntrue;}voidSigBaselineLastTradedQuantitySpec::printconst{constLuaPrintSettingsonei=ps.next;//indentationonepastcurrento<<"--SigBaselineLastTradedQuantitySpec"<getDataRequirements;//m_inputTickProvider->getDataRequirements;}boolSigBaselineLastTradedQuantitySpec::registerScripting{//eachSpecclassmustbeaddedtoregisterScriptinginSignals_Scripting.ccluabind::module[luabind::class_.def).def_readwrite.def_readwrite.def_readwrite.def_readwrite.def_readwrite.def_readwrite.def_readwrite.def_readwrite];returntrue;}}//namespacesignals}//namespacelongbeach
文章为作者独立观点,不代表观点