void MarketMaker::makeAction(int a_OrderBookId, double a_currentTime) { //m_linkToMarket->getOrderBook(a_OrderBookId)->cleanOrderBook(); OrderType thisOrderType = getOrderType() ; if(thisOrderType == CANCEL_BUY ||thisOrderType == CANCEL_SELL) { if (a_currentTime == 0.0)// NO Cancellation at the initialisation of the process { return; } else { if(thisOrderType == CANCEL_BUY) { chooseOrdersToBeCanceled(a_OrderBookId,true,a_currentTime); return; } else { chooseOrdersToBeCanceled(a_OrderBookId,false,a_currentTime); return; } } return; } int spread = m_linkToMarket->getOrderBook(a_OrderBookId)->getAskPrice() - m_linkToMarket->getOrderBook(a_OrderBookId)->getBidPrice(); if(spread < 2 * m_linkToMarket->getOrderBook(a_OrderBookId)->getTickSize()){return; } if(spread >= 2 * m_linkToMarket->getOrderBook(a_OrderBookId)->getTickSize()){ int thisOrderPrice = getOrderPrice(a_OrderBookId, thisOrderType) ; int thisOrderVolume = getOrderVolume(thisOrderPrice, a_OrderBookId, thisOrderType) ; int tickSize = m_linkToMarket->getOrderBook(a_OrderBookId)->getTickSize(); submitOrder( a_OrderBookId, a_currentTime, thisOrderVolume, thisOrderType, thisOrderPrice ); if (thisOrderType==LIMIT_BUY){ submitOrder( a_OrderBookId, a_currentTime, thisOrderVolume, LIMIT_SELL, thisOrderPrice+tickSize ); } else if(thisOrderType==LIMIT_SELL){ submitOrder( a_OrderBookId, a_currentTime, thisOrderVolume, LIMIT_BUY, thisOrderPrice-tickSize ); } } }
void process_platform() { if(getOrderID() != MP.completed_order) { if(!(getOrderState()&ORDER_ACTIVE)) { switch(getOrderType()) { case(ORDER_TYPE_FORWARD): orderStartForward(); break; case(ORDER_TYPE_LEFT_TURN): orderStartLeftTurn(); break; case(ORDER_TYPE_RIGHT_TURN): orderStartRightTurn(); break; } } else { if(MP._rotary_driver_state&ROTARY_DRIVER_ACTIVE) { if(rotaryDriverDone()) { deactivatePID(); set_stop(); setOrderDone(); MP.completed_order = getOrderID(); rotaryDriverStop(); rotaryDriverReset(); MP.adjust_state = 0; } } else { if(MP._state == PLATFORM_FORWARD) { if(getOrderTargetTicks() < cmtoticks(PLATFORM_PID_THRESHOLD)) { deactivatePID(); //set_forward(MOTOR_DEFAULT_SPEED, MOTOR_DEFAULT_SPEED); if(getOrderCurrentTicks() >= getOrderTargetTicks()) { set_stop(); setOrderDone(); MP.completed_order = getOrderID(); MP.adjust_state = 0; } } else { if(!MP.adjust_state&PLATFORM_ADJUST_DONE) { if(getOrderLengthToWall() < 7.0) { if(getOrderCurrentTicks() >= getOrderTargetTicks()*0.40 && getOrderCurrentTicks() <= getOrderTargetTicks()*0.60) { platformFineAdjust(); } } } if(getOrderCurrentTicks() >= getOrderTargetTicks()*0.6) { if(!checkFrontRight()) { deactivatePID(); set_forward(MP._originalLspeed, MP._originalRspeed); } if((!checkBackRight() && !checkFrontRight()) || (!checkBackLeft() && !checkFrontLeft())) { set_stop(); deactivatePID(); if(getOrderLengthToWall() >= 7.0) { rotaryDriverStartCM(8); } else { rotaryDriverStartCM(10); } } } } } else if(MP._state == PLATFORM_LEFT || MP._state == PLATFORM_RIGHT) { deactivatePID(); if(getOrderCurrentTicks() >= getOrderTargetTicks()) { set_stop(); setOrderDone(); MP.completed_order = getOrderID(); } } } } } if(change==1){ switch(MP._state){ case(PLATFORM_STOP): _stop(); break; case(PLATFORM_FORWARD): _go_forward(); break; case(PLATFORM_BACKWARD): _go_backward(); break; case(PLATFORM_LEFT): _turn_left(); break; case(PLATFORM_RIGHT): _turn_right(); break; default: _stop(); break; } change=0; } }