Функция ProfitControl Отклик транзакции = Неправильно указана стоп-цена: "-50.0"CLASSCODE=SPBFUT; ACCOUNT=SPBFUT000a3; TRANS_ID=1234567; OFFSET=0; SPREAD=30.0; ACTION=NEW_STOP_ORDER; SECCODE=SiU0; STOPPRICE=-50.0; EXPIRY_DATE=TODAY; OFFSET_UNITS=PRICE_UNITS; QUANTITY=1; OPERATION=B; CLIENT_CODE=РОБОТ; STOP_ORDER_KIND=TAKE_PROFIT_STOP_ORDER; SPREAD_UNITS=PRICE_UNITS;
function ProfitControl(posNow,acc,emit,class,file)
local function fn1(param1,param2,param3)
if(param1==acc and param2==emit and param2==class)then
return true
else
return false
end
end
local step = tonumber(getParamEx(class,emit,"SEC_PRICE_STEP").param_value)
local EnterPrice = RoundForStep(EnterPriceUni(posNow,emit,class,acc),step)
local profitPrice = EnterPrice + SignFunc(posNow) * Profit * step
local ProfCorrect = false --Нашли или нет нужный профит
local count = 0
local index = SearchItems("stop_orders",0,getNumberOf("stop_orders")-1, fn1, "account,sec_code,class_code")
if(index~=nil)then
for i=1,#index do
local row = getItem("stop_orders",index[i])
local flag = bit.band(row.flags,1) --Активная заявка или нет
if(flag>0)then
if(row.stop_order_type~=6 or ProfCorrect==true)then
local keyNumber = row.order_num
DeleteProfitByNumber(emit,class,keyNumber,file)
count = count + 1
else
local qtyX = row.qty
local profitPriceX = row.condition_price
local buySellX = row.condition
local signPosX = 0
if(buySellX==4)then
signPosX = -1
elseif(buySellX==5)then
signPosX = 1
end
if(signPosX==Sign_func(posNow) and qtyX==math.abs(posNow) and profitPriceX==profitPrice)then
ProfCorrect = true
else
local keyNumber = row.order_num
DeleteProfitByNumber(emit,class,keyNumber,file)
count = count + 1
end
end
end
end
end
if(ProfCorrect==false and posNow~=0)then
local profitSpread = 30 * step
if(posNow>0)then
buySell = "S"
else
buySell = "B"
end
NewStopProfit(acc,emit,class,buySell,math.abs(posNow),profitPrice,0,profitSpread,file,"Функция ProfitControl ")
count = count + 1
end
return count
end
Число не может содержать знак разделителя дробной части; Pos= -1; SECCODE=SiU0; QUANTITY=1; PRICE=71750.0; TYPE=L; OPERATION=B; CLIENT_CODE=РОБОТ; TRANS_ID=123456; ACCOUNT=SPBFUT000a3; CLASSCODE=SPBFUT; ACTION=NEW_ORDER;
function NewStopProfit(acc,emit,class,buySell,qty,stopPrice,profitOtstup,profitSpread,file,prevString)
transaction = {["ACCOUNT"]=acc,["CLASSCODE"]=class,["SECCODE"]=emit,
["ACTION"]="NEW_STOP_ORDER",
["STOP_ORDER_KIND"]="TAKE_PROFIT_STOP_ORDER",
["TRANS_ID"]="1234567",
["CLIENT_CODE"]="РОБОТ",
["EXPIRY_DATE"]="TODAY", --"GTC" тип заявки до отмены, доступна только в основной версии квика
["OPERATION"]=buySell,
["QUANTITY"]=tostring(qty),
["STOPPRICE"]=tostring(stopPrice),
["OFFSET_UNITS"]="PRICE_UNITS",
["SPREAD_UNITS"]="PRICE_UNITS",
["OFFSET"]=tostring(profitOtstup),
["SPREAD"]=tostring(profitSpread)
}
local result = sendTransaction(transaction)
local sDataString = ""
if(file~=nil or file ~="")then
sDataString = "Отклик транзакции = "..result
end
for key,val in pairs(transaction) do
sDataString = sDataString..key.."="..val.."; "
end
if(prevString~=nil)then
sDataString = prevString..sDataString
end
WriteToEndOfFile(file,sDataString)
return 1
end
Помогите пожалуйста, не могу понять что ему не нравится, версия квика 8.7.1.3
function ProfitControl(posNow,acc,emit,class,file)
local function fn1(param1,param2,param3)
if(param1==acc and param2==emit and param2==class)then
return true
else
return false
end
end
local step = tonumber(getParamEx(class,emit,"SEC_PRICE_STEP").param_value)
local EnterPrice = RoundForStep(EnterPriceUni(posNow,emit,class,acc),step)
local profitPrice = EnterPrice + SignFunc(posNow) * Profit * step
local ProfCorrect = false --Нашли или нет нужный профит
local count = 0
local index = SearchItems("stop_orders",0,getNumberOf("stop_orders")-1, fn1, "account,sec_code,class_code")
if(index~=nil)then
for i=1,#index do
local row = getItem("stop_orders",index[i])
local flag = bit.band(row.flags,1) --Активная заявка или нет
if(flag>0)then
if(row.stop_order_type~=6 or ProfCorrect==true)then
local keyNumber = row.order_num
DeleteProfitByNumber(emit,class,keyNumber,file)
count = count + 1
else
local qtyX = row.qty
local profitPriceX = row.condition_price
local buySellX = row.condition
local signPosX = 0
if(buySellX==4)then
signPosX = -1
elseif(buySellX==5)then
signPosX = 1
end
if(signPosX==Sign_func(posNow) and qtyX==math.abs(posNow) and profitPriceX==profitPrice)then
ProfCorrect = true
else
local keyNumber = row.order_num
DeleteProfitByNumber(emit,class,keyNumber,file)
count = count + 1
end
end
end
end
end
if(ProfCorrect==false and posNow~=0)then
local profitSpread = 30 * step
if(posNow>0)then
buySell = "S"
else
buySell = "B"
end
NewStopProfit(acc,emit,class,buySell,math.abs(posNow),profitPrice,0,profitSpread,file,"Функция ProfitControl ")
count = count + 1
end
return count
end
Число не может содержать знак разделителя дробной части; Pos= -1; SECCODE=SiU0; QUANTITY=1; PRICE=71750.0; TYPE=L; OPERATION=B; CLIENT_CODE=РОБОТ; TRANS_ID=123456; ACCOUNT=SPBFUT000a3; CLASSCODE=SPBFUT; ACTION=NEW_ORDER;
function NewStopProfit(acc,emit,class,buySell,qty,stopPrice,profitOtstup,profitSpread,file,prevString)
transaction = {["ACCOUNT"]=acc,["CLASSCODE"]=class,["SECCODE"]=emit,
["ACTION"]="NEW_STOP_ORDER",
["STOP_ORDER_KIND"]="TAKE_PROFIT_STOP_ORDER",
["TRANS_ID"]="1234567",
["CLIENT_CODE"]="РОБОТ",
["EXPIRY_DATE"]="TODAY", --"GTC" тип заявки до отмены, доступна только в основной версии квика
["OPERATION"]=buySell,
["QUANTITY"]=tostring(qty),
["STOPPRICE"]=tostring(stopPrice),
["OFFSET_UNITS"]="PRICE_UNITS",
["SPREAD_UNITS"]="PRICE_UNITS",
["OFFSET"]=tostring(profitOtstup),
["SPREAD"]=tostring(profitSpread)
}
local result = sendTransaction(transaction)
local sDataString = ""
if(file~=nil or file ~="")then
sDataString = "Отклик транзакции = "..result
end
for key,val in pairs(transaction) do
sDataString = sDataString..key.."="..val.."; "
end
if(prevString~=nil)then
sDataString = prevString..sDataString
end
WriteToEndOfFile(file,sDataString)
return 1
end
Помогите пожалуйста, не могу понять что ему не нравится, версия квика 8.7.1.3