PDA

View Full Version : پیاده سازی یه الگوریتم ...



exlord
دوشنبه 12 اردیبهشت 1390, 11:24 صبح
سلام...
یه کد دارم به زبان Pascal ولی مشکلم تو خود پاسکال نیست بلکه تو الگوریتم / روش پیاده سازی یه کاریه که لازم دارم ...
یه event هست به نام OnNewRateEvent ...
یه آرایه دارم به اسم TradeList ... مقادیر داخلی این آزایه هر بار که این event اجرا میشه تغییر میکنن ...
من توی eventhandler مربوطه توی این آرایه میگردم و اگه آیتمی شرایط خاصی رو داشه باشه ...یه آیتم از نوع مخالف اون به این آرایه اضافه میکنم... به این کار میگم که این آیتم Hedged شد و هر آیتم فقط باید یکبار Hedge بشه .... خوب تا اینجاش مشکلی نیست .... ولی دفعه دومی که اونت اجرا میشه نمیدونم که کدوم آیتم Hedge شده یا نه ... این آیتم ها هم ReadOnly هستند ومن قادر به تغییر چیزی توش نیستم ...
هر آیتم به ID و Tag داره ...هر دو string ...
Tag رو موقع ساختن من میدم ولی ID یه مقدار unique هست ...

کسی نظری داره ؟؟
اینم کل کد ...


function HedgeLossPosition():Extended;
var
i, j: Integer;
s : Double;
bs : TBuySell;
begin
for i:=0 to TradeList.Count-1 do
begin
if(TradeList.Get(i) ???????? ) then //<----------------------------- what?
begin
if ( (TradeList.Get(i).NetPL/TradeList.Get(i).Amount) <= -35) then
begin
if(TradeList.Get(i).BuySell = bsBuy)then
begin
bs := bsSell;
s := TradeList.Get(i).Instrument.Buy + Stop*Point;
end
else
begin
bs := bsBuy;
s := TradeList.Get(i).Instrument.Sell - Stop*Point;
end;
for j := 1 to HedgeCount do
CreateOrder(TradeList.Get(i).Instrument, TradeList.Get(i).Account, TradeList.Get(i).Amount, bs, s, NullRate, TraderRange, ' TAG UserDefined ');//<---- Hedging
log('position hedged');
end;
end;
end;
end;

SAASTN
دوشنبه 12 اردیبهشت 1390, 17:23 عصر
خوب یه آرایه از Integer هم سطح با TradeList تعریف کنید، هر آیتمی که Hedge میشه ID یا اندیسش تو TradeList(اگه آیتم ها در لیست جابجا نمی شن) رو به این آرایه اضافه کنید. حالا وقتی شرایط برای Hedge کردن یه آیتم برقراره توی اون آرایه بگردید ببینید که IDش قبلا اضافه نشده باشه.

exlord
دوشنبه 12 اردیبهشت 1390, 17:59 عصر
خوب یه آرایه از Integer هم سطح با TradeList تعریف کنید، هر آیتمی که Hedge میشه ID یا اندیسش تو TradeList(اگه آیتم ها در لیست جابجا نمی شن) رو به این آرایه اضافه کنید. حالا وقتی شرایط برای Hedge کردن یه آیتم برقراره توی اون آرایه بگردید ببینید که IDش قبلا اضافه نشده باشه.
ممنون از توجهتون ....این روش به ذهن خودم هم رسید ولی :
1 - طول TradeList دائما در حال تغییر
2 - آیتم هاش دائما در حال ساخته شدن و از بین رفتن هستند ...

من اومدم ID آیتمی که داره Hedge میشه رو توی Tag ایتمی که داره عمل Hedge رو انجام میده قرار دادم و هر بار اونو چک میکنم به این صورت ....
function ShouldHedge(T:TTrade):Boolean;
var
i : Integer;
begin
for i:=0 to TradeList.Count-1 do
begin
if(TradeList.Get(i).Tag = T.id) OR (T.Tag <> 'IWCR Trade') then
begin
Result := false;
exit;
end;
end;
Result := true;
end;