コード例 #1
0
ファイル: StreamOfTrades.cpp プロジェクト: karapish/CPP
// Test order when printing out
void RunTest3( Aggregator& aggregator )
{
   auto test = {
      Trade( 1, "bbb", 1, 100 ),
      Trade( 2, "aaa", 1, 100 ),
   };

   METRICS expected = {
      std::make_pair( "aaa", SymbolMetrics( 0, 1, 100, 100 ) ),
      std::make_pair( "bbb", SymbolMetrics( 0, 1, 100, 100 ) )
   };

   RunTest( aggregator, test, expected );
}
コード例 #2
0
void RunSequence::HandleQuote2( const ou::tf::Quote& quote ) {

  m_quote = quote;
  ptime dt( quote.DateTime() );
  std::cout << dt << " quote: B:" << quote.Bid() << "-A:" << quote.Ask() << std::endl;

  static ptime mark( date( 2012, 7, 22 ), time_duration( 21, 7, 5, 368590 ) );
  if ( quote.DateTime() == mark ) {
    std::cout << dt << " quote " << std::endl;
  }

  if ( quote.IsValid() ) {
    m_quotes.Append( quote );

    switch ( m_stateTimeFrame ) {
    case EPreOpen:
      if ( m_dtOpeningBell <= dt ) {
        m_stateTimeFrame = EBellHeard;
      }
      break;
    case EBellHeard:
      m_stateTimeFrame = EPauseForQuotes;
      break;
    case EPauseForQuotes:
      if ( m_dtStartTrading <= dt ) {
        m_stateTimeFrame = EAfterBell;
      }
      break;
    case EAfterBell:
      m_stateTimeFrame = ETrading;
      break;
    case ETrading:
      if ( m_dtCancelTrades <= dt ) {
        m_pPosition->CancelOrders();
        m_stateTimeFrame = ECancelling;
      }
      else {
        Trade();
      }
      break;
    case ECancelling:
      if ( m_dtClosePositions <= dt ) {
        m_pPosition->ClosePosition();
        m_stateTimeFrame = EClosing;
      }
      break;
    case EGoingNeutral:
      assert( false );
      break;
    case EClosing:
      if ( m_dtClosingBell <= dt ) {
        m_stateTimeFrame = EAfterHours;
      }
      break;
    case EAfterHours:
      break;

    }
  }
}
コード例 #3
0
ファイル: main.c プロジェクト: hallo128/C
int main(int argc, const char * argv[]) {
    //1.初始化数据
    Init();
    printf("\n------交易前-------------\n");
    //2.打印这些初始化数据
    ShowProps();
    ShowPlayers();
    
    Trade(&players[0], 3); //进行交易
    printf("\n------交易后-------------\n");
    ShowProps();
    ShowPlayers();
    
    return 0;
}
コード例 #4
0
ファイル: StreamOfTrades.cpp プロジェクト: karapish/CPP
static void RunTest1( Aggregator& aggregator )
{
   auto test = {
      Trade( 52924702, "aaa", 13, 1136 ),
      Trade( 52924702, "aac", 20, 477 ),
      Trade( 52925641, "aab", 31, 907 ),
      Trade( 52927350, "aab", 29, 724 ),
      Trade( 52927783, "aac", 21, 638 ),
      Trade( 52930489, "aaa", 18, 1222 ),
      Trade( 52931654, "aaa", 9, 1077 ),
      Trade( 52933453, "aab", 9, 756 )
   };

   METRICS expected = {
      std::make_pair( "aaa", SymbolMetrics( 5787, 40, 1161, 1222 ) ),
      std::make_pair( "aab", SymbolMetrics( 6103, 69, 810, 907 ) ),
      std::make_pair( "aac", SymbolMetrics( 3081, 41, 559, 638 ) )
   };

   RunTest( aggregator, test, expected );
}
コード例 #5
0
void TradingEngine::createTrade(Ask ask, Bid bid) {
    auto trade = Trade(ask, bid);
//    qDebug() << "Created New Trade: " << trade;
    emit newTradeCreated(trade);
}
コード例 #6
0
ファイル: MXTree.cpp プロジェクト: jsc0218/MxTree
void MXTree::Split(GiSTnode **node, const GiSTentry& entry)
{
	double radii[2], dist, *dists = new double[(*node)->NumEntries()*2];
	int pageNums[2], cands[2];
	vector<vector<int>> vec(2);
	((MXTnode *)(*node))->TestPromotion(radii, &dist, pageNums, cands, dists, vec);
	if (Trade((*node)->Path().IsRoot(), radii, dist, pageNums, ((MXTnode *)(*node))->GetPageNum()+1, (*node)->NumEntries())) {
		// don't split now
		delete[] dists;
		GiSTpath oldPath = (*node)->Path();

		int startPage = ((*node)->Path().IsRoot() ? rootPage : (*node)->Path().Page());
		int pageNum = ((MXTnode *)(*node))->GetPageNum();
		((MXTfile *)store)->Deallocate(startPage, pageNum);
		startPage = ((MXTfile *)store)->Allocate(++pageNum);
		(*node)->Path().MakeSibling(startPage);
		rootPage = ((*node)->Path().IsRoot() ? startPage : rootPage);
		((MXTnode *)(*node))->SetPageNum(pageNum);
		WriteNode(*node);

		if (!(*node)->Path().IsRoot() && startPage != oldPath.Page()) {
			GiSTpath parentPath = oldPath;
			parentPath.MakeParent();
			GiSTnode *parentNode = ReadNode(parentPath);
			GiSTentry *e = parentNode->SearchPtr(oldPath.Page());
			assert(e != NULL);
			int pos = e->Position();
			e->SetPtr(startPage);
			parentNode->DeleteEntry(pos);
			parentNode->InsertBefore(*e, pos);
			WriteNode(parentNode);
			delete parentNode;
			delete e;
		}
	} else {
		// split now
		bool bLeft = false, bNewRoot = false;

		if ((*node)->Path().IsRoot()) {
			bNewRoot = true;
			(*node)->Path().MakeChild(rootPage);
			rootPage = store->Allocate();
		}

		int oldPageNum = ((MXTnode *)(*node))->GetPageNum();
		GiSTnode *node2 = ((MXTnode *)(*node))->PickSplit(cands, dists, vec);
		delete[] dists;
		int curPageNum = ((MXTnode *)(*node))->GetPageNum();
		assert(oldPageNum >= curPageNum);
		if (oldPageNum > curPageNum) {
			((MXTfile *)store)->Deallocate((*node)->Path().Page()+curPageNum, oldPageNum-curPageNum);
		}
		node2->Path().MakeSibling(((MXTfile *)store)->Allocate(((MXTnode *)node2)->GetPageNum()));

		WriteNode(*node);
		WriteNode(node2);
	
		GiSTentry *e = (*node)->SearchPtr(entry.Ptr());
		if (e != NULL) {
			bLeft = true;
			delete e;
		}
	
		GiSTentry *e1 = (*node)->Union();
		GiSTentry *e2 = node2->Union();
	
		e1->SetPtr((*node)->Path().Page());
		e2->SetPtr(node2->Path().Page());
		// Create new root if root is being split
		if (bNewRoot) {
			GiSTnode *root = NewNode(this);
			root->SetLevel((*node)->Level() + 1);
			root->InsertBefore(*e1, 0);
			root->InsertBefore(*e2, 1);
			root->Path().MakeRoot();
			WriteNode(root);
			delete root;
		} else {
			// Insert entry for N' in parent
			GiSTpath parentPath = (*node)->Path();
			parentPath.MakeParent();
			GiSTnode *parent = ReadNode(parentPath);
			// Find the entry for N in parent
			GiSTentry *e = parent->SearchPtr((*node)->Path().Page());
			assert(e != NULL);
			// Insert the new entry right after it
			int pos = e->Position();
			parent->DeleteEntry(pos);
			parent->InsertBefore(*e1, pos);
			parent->InsertBefore(*e2, pos+1);
			delete e;
			if (!parent->IsOverFull(*store)) {
				WriteNode(parent);
			} else {
				Split(&parent, bLeft? *e1: *e2);  // parent is the node which contains the entry inserted
				GiSTpage page = (*node)->Path().Page();
				(*node)->Path() = parent->Path();  // parent's path may change
				(*node)->Path().MakeChild(page);
				page = node2->Path().Page();
				node2->Path() = (*node)->Path();
				node2->Path().MakeSibling(page);
			}
			delete parent;
		}
		if (!bLeft) {
			delete *node;
			*node = node2;  // return it
		} else {
			delete node2;
		}
		delete e1;
		delete e2;
	}
}