Блог им. Bondiator
<code class="rainbow" data-language="lua"> while stopped == false do Quotes_1 = getQuoteLevel2("SPBFUT", "SRU0") Bid_Count_1 = tonumber(Quotes_1.bid_count) if Bid_Count_1>1 then aa= tonumber(Quotes_1.bid[Bid_Count_1].quantity) SetCell(Table, 1, 1, tostring(aa)) end local asset = getFuturesHolding("SPBFUT", "SPBFUT****","SRU0",0).totalnet repeat if aa>1 and asset>0 then local ID_B_Order=10 local OrderSell = { ["ACTION"]="NEW_ORDER", ["ACCOUNT"]= "SPBFUT****", ["OPERATION"] = "S", ["CLASSCODE"]="SPBFUT", ["SECCODE"] = "SRU0", ["PRICE"] = "0", ["QUANTITY"] = tostring(1), ["TRANS_ID"] = tostring(ID_B_Order), ["TYPE"] = "M", } local Err_Order = sendTransaction(OrderSell) message(Err_Order) end asset=asset-1 sleep(1000) until asset==5<br />end</code>
начало цикла
P.S. только обычно такую конструкцию не используют
гораздо понятней while is_run do end
в данном коде достаточно поставить после цикла repeat остановку while
типа
stopped = true (или любое число или символ)
т.е. последняя строка примет вид
останется 5 бумаг, если все транзакции сработают. Если нужен контроль за их исполнением, то написали ниже как это делать
Алгоритм примерно такой:
1. Отправляем заявку на продажу. Скрипт запоминает trans_id этой заявки.
2. Через колбек OnOrder получаем информацию о всех заявках. Смотрим, когда у заявки с запомненным trans_id статус поменяется на «исполнена».
3. Как только заявка с запомненным trans_id исполнена, отправляем новую заявку
Врач-бондиатОр, смотрите, тут уже писали, собираю все в кучу.
у Вас в коде
запрашиваете стакан и первую цену бида (но почему то только один раз)
снова один раз запрашиваете количество бумаг
дальше
repeat — until — он заходит в цикл в любом случае один раз… не понятно, почему именно этот вид цикла выбран… ну ладно...
что надо сделать:
1. завести еще одну переменную, в ней хранить номер (trans_id) отправляемой заявки. В Вашем коде каждой заявке Вы присваиваете один и тот же номер. Квик такое пропускает, но в этом нет смысла.
2. Добавить обработку колбека OnOrder, чтобы он сбрасывал в ноль хранимый номер.
т.е. код должне выглядеть примерно так:
т.е. если Active_Trans_Id равен 0, но программа отправляет заявку и присваитвает переменной Active_Trans_Id номер заявки.
В следующем проходе никакая заявка отправляться не будет, так как Active_Trans_Id не равен 0.
Колбек OnOrder смотрит, прошла ли заявка с номером Active_Trans_Id и если прошла, обнуляет Active_Trans_Id.
P.S. код писал в блокноте, не проверял. Под номером заявки, имею ввиде Trans_Id
На случай крайний поменяйте логику условия.