#property copyright "Adam Flash / adam@freelive.org" #property link "freelive.org" #property library #import "wininet.dll" int InternetOpenA(string a0, int a1, string a2, string a3, int a4); int InternetOpenUrlA(int a0, string a1, string a2, int a3, int a4, int a5); int InternetReadFile(int a0, string a1, int a2, int& a3[]); int InternetCloseHandle(int a0); #import string gs_76 = "This program is free software; but you may *not* redistribute or modify it -- in whole or in part -- except for personal use only."; string gs_84 = "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; string gs_92 = "http://autotrade.collective2.com:7878/?cmd=login"; string gs_100 = "8.2"; string gs_108 = ""; string gs_116 = ""; string gs_124 = ""; string gs_132; int g_str2int_140 = 10000; bool gi_144 = TRUE; string gsa_148[999]; bool gba_152[999]; string gsa_156[999]; string gsa_160[999]; int gia_164[999]; int gi_168 = 0; string gs_172 = ""; string gs_180 = ""; string gs_188 = "C2BackLog"; bool gi_unused_196 = FALSE; int gi_200; int gi_204; int gi_208 = 0; int gi_212 = 1; int gi_unused_216 = 3; int gi_220 = 80; string gs_224 = "http://www.collective2.com/cgi-perl/signal.mpl?cmd=signal"; string getWarranty() { return (gs_76); } string getWarranty2() { return (gs_84); } int getPollInterval() { return (g_str2int_140); } string getHostName() { string ls_ret_0; GrabWeb("http://www.whatismyip.com/automation/n09230945.asp", ls_ret_0); return (ls_ret_0); } string getLastC2Message() { return (gs_180); } string getSignalIDbyIndex(int ai_0) { return (gsa_148[ai_0]); } string getTicketIDbyIndex(int ai_0) { return (gsa_160[ai_0]); } int isSignalActive(int ai_0) { return (gba_152[ai_0]); } void deactivateSignal(int ai_0) { gba_152[ai_0] = 0; } int getSignalOp(int ai_0) { return (gia_164[ai_0]); } int getSignalSlotBySignal(string as_0) { for (int l_index_8 = 0; l_index_8 < gi_168; l_index_8++) if (gsa_148[l_index_8] == as_0) return (l_index_8); return (-1); } int getSignalSlotByTicket(string as_0) { for (int l_index_8 = 0; l_index_8 <= gi_168 + 1; l_index_8++) if (gsa_160[l_index_8] == as_0) return (l_index_8); return (-1); } void saveSignal(string as_0, string as_8, string as_16, int ai_24) { int li_28; bool li_32; if (gi_144) li_28 = getSignalSlotBySignal(as_0); if (li_28 == -1) { li_32 = FALSE; for (int l_index_36 = 0; l_index_36 < gi_168; l_index_36++) { if (!gba_152[l_index_36] || gsa_148[l_index_36] == as_0) { li_32 = TRUE; li_28 = l_index_36; } } if (!li_32) { li_28 = gi_168; gi_168++; } } Print("Saving signal: " + as_0 + " ticket: " + as_16 + " slot:" + li_28); gsa_148[li_28] = as_0; gba_152[li_28] = 1; if (as_8 != "") gsa_156[li_28] = as_8; gsa_160[li_28] = as_16; gia_164[li_28] = ai_24; } int C2AckSig(string as_0, double ad_8, int /**/ ai_unused_16, int /**/ ai_unused_20, string as_unused_24) { string ls_40; string as_32; string ls_48 = "http://" + gs_116 + ":" + gs_124 + "/?cmd=confirmsig&session=" + gs_108 + "&h=" + gs_132; ls_48 = ls_48 + "&sigid=" + as_0; ls_48 = ls_48 + "&quant=" + ad_8; if (as_32 != "") ls_48 = ls_48 + "&permid=" + as_32; GrabWeb(ls_48, ls_40); if (gi_144) WriteGeneric(gs_188, ls_48 + " :: " + ls_40); if (C2CheckError(ls_40) != 1) { Print("C2 Acknowledgement Error"); return (0); } return (1); } int C2AckFill(string as_0, double ad_8, double ad_16, string as_24, string as_unused_32 = "") { string ls_40; string ls_48 = "http://" + gs_116 + ":" + gs_124 + "/?cmd=mult2fillconfirm&session=" + gs_108 + "&h=" + gs_132; ls_48 = ls_48 + "&filldata=" + as_0; ls_48 = ls_48 + "|sep|" + ad_8; ls_48 = ls_48 + "|sep|" + as_24; ls_48 = ls_48 + "|sep|" + ad_16; GrabWeb(ls_48, ls_40); if (gi_144) WriteGeneric(gs_188, ls_48 + " :: " + ls_40); if (C2CheckError(ls_40) != 1) { Print("C2 Acknowledgement Error"); return (0); } return (1); } int C2AckCancel(string as_0) { string ls_8; string ls_16 = "http://" + gs_116 + ":" + gs_124 + "/?cmd=cancelconfirm&session=" + gs_108 + "&h=" + gs_132; ls_16 = ls_16 + "&sigid=" + as_0; GrabWeb(ls_16, ls_8); if (gi_144) WriteGeneric(gs_188, ls_16 + " :: " + ls_8); if (C2CheckError(ls_8) != 1) { Print("C2 Acknowledgement Error"); return (0); } return (1); } int C2CheckError(string as_0) { int li_8 = 0; string ls_12 = extractXMLNode(as_0, "status", li_8); if (ls_12 == "OK") { gs_180 = as_0; return (1); } string ls_20 = extractXMLNode(as_0, "error", li_8); gs_172 = stripTags(ls_20); Print("C2Error: " + gs_172); return (StrToInteger(extractXMLNode(ls_20, "code", li_8))); } void PollC2() { string ls_8; string ls_0 = "http://" + gs_116 + ":" + gs_124 + "/?cmd=latestsigs&session=" + gs_108 + "&h=" + gs_132; GrabWeb(ls_0, ls_8); int li_16 = 0; g_str2int_140 = StrToInteger(extractXMLNode(ls_8, "pollinterval", li_16)); C2CheckError(ls_8); } int InitCollective2(string as_0, string as_8, string as_16, string as_24, int /**/ ai_unused_32) { string ls_48; if (as_0 == "") return (0); if (as_8 == "") return (0); gs_132 = getHostName(); string ls_40 = gs_92 + "&e=" + as_0; ls_40 = ls_40 + "&p=" + as_8; ls_40 = ls_40 + "&protoversion=" + gs_100; ls_40 = ls_40 + "&client=" + as_16; ls_40 = ls_40 + "&h=" + gs_132; ls_40 = ls_40 + "&build=" + as_24; GrabWeb(ls_40, ls_48); int li_56 = 0; string ls_60 = extractXMLNode(ls_48, "data", li_56); string ls_68 = extractXMLNode(ls_48, "status", li_56); if (ls_68 == "OK") { gs_108 = extractXMLNode(ls_60, "session", li_56); gs_116 = extractXMLNode(ls_60, "redirectip", li_56); gs_124 = extractXMLNode(ls_60, "redirectport", li_56); g_str2int_140 = StrToInteger(extractXMLNode(ls_60, "pollinterval", li_56)); return (1); } string ls_76 = extractXMLNode(ls_60, "error", li_56); return (StrToInteger(extractXMLNode(ls_76, "code", li_56))); } int hSession(bool ai_0) { string ls_4; if (gi_200 == 0) { ls_4 = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)"; gi_200 = InternetOpenA(ls_4, gi_208, "0", "0", 0); gi_204 = InternetOpenA(ls_4, gi_212, "0", "0", 0); } if (ai_0) return (gi_204); return (gi_200); } string extractXMLNode(string as_0, string as_8, int &ai_unused_16) { int li_20 = 0; int li_24 = 0; string ls_ret_28 = ""; string ls_36 = ""; for (int li_44 = 0; li_44 < StringLen(as_0); li_44++) { if (StringGetChar(as_0, li_44) == 13 || StringGetChar(as_0, li_44) == 10 || StringGetChar(as_0, li_44) == 9) continue; if (StringGetChar(as_0, li_44) == ' ' && StringGetChar(as_0, li_44 + 1) == ' ') continue; ls_36 = ls_36 + StringSubstr(as_0, li_44, 1); } as_0 = ls_36; li_20 = StringFind(as_0, as_8 + ">"); li_24 = StringFind(as_0, " StringLen(as_8) + 1 + 1) ls_ret_28 = ls_ret_28 + StringSubstr(as_0, li_20 + 1 + StringLen(as_8), li_24 - li_20 - StringLen(as_8) - 1); ls_36 = ""; for (li_44 = 0; li_44 < StringLen(ls_ret_28); li_44++) { if (StringGetChar(ls_ret_28, li_44) == ' ' && StringGetChar(ls_ret_28, li_44 + 1) == ' ') continue; ls_36 = ls_36 + StringSubstr(ls_ret_28, li_44, 1); } ls_ret_28 = ls_36; return (ls_ret_28); } void Collective2PositionSelect(string as_0, string as_8, string as_16) { string ls_24 = "http://www.collective2.com/cgi-perl/signal.mpl?systemid=" + as_0; ls_24 = ls_24 + "&pw=" + as_8; ls_24 = ls_24 + "&cmd=positionstatus"; ls_24 = ls_24 + "&symbol=" + as_16; string ls_32 = ""; GrabWeb(ls_24, ls_32); ls_32 = stripTags(ls_32); getStringParam(ls_32, 5); } string stripTags(string as_0) { int li_8 = 0; int li_12 = 0; string ls_ret_16 = ""; string ls_24 = ""; for (int li_32 = 0; li_32 < StringLen(as_0); li_32++) { if (StringGetChar(as_0, li_32) == 13 || StringGetChar(as_0, li_32) == 10 || StringGetChar(as_0, li_32) == 9) continue; if (StringGetChar(as_0, li_32) == ' ' && StringGetChar(as_0, li_32 + 1) == ' ') continue; ls_24 = ls_24 + StringSubstr(as_0, li_32, 1); } as_0 = ls_24; while (li_8 > -1) { li_8 = StringFind(as_0, ">", li_8 + 1); li_12 = StringFind(as_0, "<", li_12 + 1); if (li_12 - li_8 > 1) ls_ret_16 = ls_ret_16 + StringSubstr(as_0, li_8 + 1, li_12 - li_8 - 1) + " "; } ls_24 = ""; for (li_32 = 0; li_32 < StringLen(ls_ret_16); li_32++) { if (StringGetChar(ls_ret_16, li_32) == ' ' && StringGetChar(ls_ret_16, li_32 + 1) == ' ') continue; ls_24 = ls_24 + StringSubstr(ls_ret_16, li_32, 1); } ls_ret_16 = ls_24; return (ls_ret_16); } void getStringParam(string as_0, int ai_8) { int li_12 = 0; for (int l_count_16 = 0; l_count_16 < ai_8 - 1; l_count_16++) li_12 = StringFind(as_0, " ", li_12 + 1); int li_20 = StringFind(as_0, " ", li_12 + 1); if (li_20 == -1) li_20 = StringLen(as_0); StringSubstr(as_0, li_12, li_20 - li_12); } void Collective2OrderClose(string as_0, string as_8, int ai_16, double ad_20, string as_28, string as_36, bool ai_44) { string ls_48 = ""; if (ai_16 == 0) ls_48 = "STC"; if (ai_16 == 1) ls_48 = "BTC"; string ls_56 = gs_224 + "&systemid=" + as_28; ls_56 = ls_56 + "&pw=" + as_36; ls_56 = ls_56 + "&instrument=" + as_0; ls_56 = ls_56 + "&action=" + ls_48; ls_56 = ls_56 + "&quant=" + ad_20; ls_56 = ls_56 + "&symbol=" + as_8; ls_56 = ls_56 + "&duration=GTC"; string ls_64 = ""; if (ai_44) Print("C2 POST: " + ls_56); GrabWeb(ls_56, ls_64); stripTags(ls_64); } void Collective2OrderSend(string as_0, string as_8, int ai_16, double ad_20, double ad_28, int /**/ ai_unused_36, int /**/ ai_unused_40, double ad_44, int /**/ ai_unused_52, string as_56, string as_64) { string ls_76 = ""; bool ai_72; if (ai_16 == 0 || ai_16 == 2) ls_76 = "BTO"; if (ai_16 == 1 || ai_16 == 3) ls_76 = "STO"; string ls_84 = gs_224 + "&systemid=" + as_56; ls_84 = ls_84 + "&pw=" + as_64; ls_84 = ls_84 + "&instrument=" + as_0; ls_84 = ls_84 + "&action=" + ls_76; ls_84 = ls_84 + "&quant=" + ad_20; ls_84 = ls_84 + "&symbol=" + as_8; if (ad_28 != 0.0) ls_84 = ls_84 + "&stoploss=" + as_8; if (ad_44 != 0.0) ls_84 = ls_84 + "&profittarget=" + as_8; ls_84 = ls_84 + "&duration=GTC"; string ls_92 = ""; if (ai_72) Print("C2 POST: " + ls_84); GrabWeb(ls_84, ls_92); stripTags(ls_92); } string Collective2OrderModify(int /**/ ai_unused_0, int /**/ ai_unused_4, int /**/ ai_unused_8, int /**/ ai_unused_12, int /**/ ai_unused_16, int /**/ ai_unused_20, int /**/ ai_unused_24, string as_unused_28) { return ("unimplemented"); } int GrabWeb(string as_0, string &as_8) { int lia_24[] = {1}; string ls_28 = "x"; int li_16 = InternetOpenUrlA(hSession(0), as_0, "0", 0, -2080374528, 0); if (li_16 == 0) return (0); int li_20 = InternetReadFile(li_16, ls_28, gi_220, lia_24); if (li_20 == 0) return (0); int li_36 = lia_24[0]; for (as_8 = StringSubstr(ls_28, 0, lia_24[0]); lia_24[0] != 0; as_8 = as_8 + StringSubstr(ls_28, 0, lia_24[0])) { li_20 = InternetReadFile(li_16, ls_28, gi_220, lia_24); if (lia_24[0] == 0) break; li_36 += lia_24[0]; } li_20 = InternetCloseHandle(li_16); if (li_20 == 0) return (0); return (1); } int WriteGeneric(string a_name_0, string as_8) { int l_file_16 = FileOpen(a_name_0, FILE_WRITE|FILE_READ, "/t"); FileSeek(l_file_16, 0, SEEK_END); FileWrite(l_file_16, " Time " + TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS) + ": " + as_8); FileClose(l_file_16); Print(as_8); return (0); }