#property copyright "Copyright 200904,匯聚自由" #property link "mydearsimon@gmail.com" extern int finalin = 9; extern int finalout = 22; int gi_84 = 64; extern int profit = 60; extern int stoploss = 40; double gd_96 = 0.1; double gd_104 = 0.2; double gd_112 = 0.3; double gd_120 = 0.4; double gd_128 = 0.6; double gd_136 = 0.9; double gd_144 = 1.4; double gd_152 = 2.0; double gd_160; double gd_168; double gd_176; double gd_184; double gd_192; double gd_unused_200 = 0.0; double gd_208 = 0.0; double g_low_216 = 0.0; double g_high_224 = 0.0; double gd_232 = 0.0; double gd_240 = 0.0; double gd_248 = 0.0; double gd_256 = 0.0; double gd_264 = 0.0; double gd_272 = 0.0; double gd_280 = 0.0; double gd_288 = 0.0; double gd_296 = 0.0; double gd_304 = 0.0; double gd_312 = 0.0; double gd_320 = 0.0; double gd_328 = 0.0; double gd_336 = 0.0; double gd_344 = 0.0; double gd_352 = 0.0; double gd_360 = 0.0; double gd_368 = 0.0; double gd_376 = 0.0; double gd_384; double gda_392[8]; double g_price_396; double gd_404; double gd_412; double gd_420; double gd_428; int g_ticket_436; int g_ticket_440; int gi_444; int gi_448; int g_index_452 = 0; int gi_456 = 0; int gi_460 = 0; int gi_464 = 0; int init() { return (0); } int deinit() { return (0); } int start() { gd_412 = Ask - Bid; if (TimeYear(TimeCurrent()) >= 2010 || TimeMonth(TimeCurrent()) > 6 && gi_456 == 0 && gi_444 == 0) { Alert("您好,程式自動交易系統使用期限已滿"); Alert("如有需要,請聯繫givememoney2007@gmail.com,方便程式寄達 "); Alert("我將會盡速與您聯繫,謝謝"); gi_456 = -1; } g_low_216 = Low[iLowest(NULL, 0, MODE_LOW, gi_84, 1)]; g_high_224 = High[iHighest(NULL, 0, MODE_HIGH, gi_84, 1)]; if (g_high_224 <= 250000.0 && g_high_224 > 25000.0) gd_352 = 100000; else { if (g_high_224 <= 25000.0 && g_high_224 > 2500.0) gd_352 = 10000; else { if (g_high_224 <= 2500.0 && g_high_224 > 250.0) gd_352 = 1000; else { if (g_high_224 <= 250.0 && g_high_224 > 25.0) gd_352 = 100; else { if (g_high_224 <= 25.0 && g_high_224 > 12.5) gd_352 = 12.5; else { if (g_high_224 <= 12.5 && g_high_224 > 6.25) gd_352 = 12.5; else { if (g_high_224 <= 6.25 && g_high_224 > 3.125) gd_352 = 6.25; else { if (g_high_224 <= 3.125 && g_high_224 > 1.5625) gd_352 = 3.125; else { if (g_high_224 <= 1.5625 && g_high_224 > 0.390625) gd_352 = 1.5625; else if (g_high_224 <= 0.390625 && g_high_224 > 0.0) gd_352 = 0.1953125; } } } } } } } } gd_360 = g_high_224 - g_low_216; gd_208 = MathFloor(MathLog(gd_352 / gd_360) / MathLog(2)); gd_344 = gd_352 * MathPow(0.5, gd_208); gd_232 = MathFloor(g_low_216 / gd_344) * gd_344; if (gd_232 + gd_344 > g_high_224) gd_240 = gd_232 + gd_344; else gd_240 = gd_232 + 2.0 * gd_344; if (g_low_216 >= 3.0 * (gd_240 - gd_232) / 16.0 + gd_232 && g_high_224 <= 9.0 * (gd_240 - gd_232) / 16.0 + gd_232) gd_256 = gd_232 + (gd_240 - gd_232) / 2.0; else gd_256 = 0; if (g_low_216 >= gd_232 - (gd_240 - gd_232) / 8.0 && g_high_224 <= 5.0 * (gd_240 - gd_232) / 8.0 + gd_232 && gd_256 == 0.0) gd_248 = gd_232 + (gd_240 - gd_232) / 2.0; else gd_248 = 0; if (g_low_216 >= gd_232 + 7.0 * (gd_240 - gd_232) / 16.0 && g_high_224 <= 13.0 * (gd_240 - gd_232) / 16.0 + gd_232) gd_272 = gd_232 + 3.0 * (gd_240 - gd_232) / 4.0; else gd_272 = 0; if (g_low_216 >= gd_232 + 3.0 * (gd_240 - gd_232) / 8.0 && g_high_224 <= 9.0 * (gd_240 - gd_232) / 8.0 + gd_232 && gd_272 == 0.0) gd_280 = gd_240; else gd_280 = 0; if (g_low_216 >= gd_232 + (gd_240 - gd_232) / 8.0 && g_high_224 <= 7.0 * (gd_240 - gd_232) / 8.0 + gd_232 && gd_248 == 0.0 && gd_256 == 0.0 && gd_272 == 0.0 && gd_280 == 0.0) gd_264 = gd_232 + 3.0 * (gd_240 - gd_232) / 4.0; else gd_264 = 0; if (gd_248 + gd_256 + gd_264 + gd_272 + gd_280 == 0.0) gd_288 = gd_240; else gd_288 = 0; gd_368 = gd_248 + gd_256 + gd_264 + gd_272 + gd_280 + gd_288; if (gd_248 > 0.0) gd_296 = gd_232; else gd_296 = 0; if (gd_256 > 0.0) gd_304 = gd_232 + (gd_240 - gd_232) / 4.0; else gd_304 = 0; if (gd_264 > 0.0) gd_312 = gd_232 + (gd_240 - gd_232) / 4.0; else gd_312 = 0; if (gd_272 > 0.0) gd_320 = gd_232 + (gd_240 - gd_232) / 2.0; else gd_320 = 0; if (gd_280 > 0.0) gd_328 = gd_232 + (gd_240 - gd_232) / 2.0; else gd_328 = 0; if (gd_368 > 0.0 && gd_296 + gd_304 + gd_312 + gd_320 + gd_328 == 0.0) gd_336 = gd_232; else gd_336 = 0; gd_376 = gd_296 + gd_304 + gd_312 + gd_320 + gd_328 + gd_336; gd_192 = (gd_368 - gd_376) / 8.0; gd_384 = gd_376 - 2.0 * gd_192; g_price_396 = MathFloor(10000.0 * gd_384 + 0.5) / 10000.0; gd_404 = MathFloor(10000.0 * (gd_384 + 12.0 * gd_192) + 0.5) / 10000.0; g_low_216 = Low[iLowest(NULL, 0, MODE_LOW, gi_84, 2)]; g_high_224 = High[iHighest(NULL, 0, MODE_HIGH, gi_84, 2)]; if (g_high_224 <= 250000.0 && g_high_224 > 25000.0) gd_352 = 100000; else { if (g_high_224 <= 25000.0 && g_high_224 > 2500.0) gd_352 = 10000; else { if (g_high_224 <= 2500.0 && g_high_224 > 250.0) gd_352 = 1000; else { if (g_high_224 <= 250.0 && g_high_224 > 25.0) gd_352 = 100; else { if (g_high_224 <= 25.0 && g_high_224 > 12.5) gd_352 = 12.5; else { if (g_high_224 <= 12.5 && g_high_224 > 6.25) gd_352 = 12.5; else { if (g_high_224 <= 6.25 && g_high_224 > 3.125) gd_352 = 6.25; else { if (g_high_224 <= 3.125 && g_high_224 > 1.5625) gd_352 = 3.125; else { if (g_high_224 <= 1.5625 && g_high_224 > 0.390625) gd_352 = 1.5625; else if (g_high_224 <= 0.390625 && g_high_224 > 0.0) gd_352 = 0.1953125; } } } } } } } } gd_360 = g_high_224 - g_low_216; gd_208 = MathFloor(MathLog(gd_352 / gd_360) / MathLog(2)); gd_344 = gd_352 * MathPow(0.5, gd_208); gd_232 = MathFloor(g_low_216 / gd_344) * gd_344; if (gd_232 + gd_344 > g_high_224) gd_240 = gd_232 + gd_344; else gd_240 = gd_232 + 2.0 * gd_344; if (g_low_216 >= 3.0 * (gd_240 - gd_232) / 16.0 + gd_232 && g_high_224 <= 9.0 * (gd_240 - gd_232) / 16.0 + gd_232) gd_256 = gd_232 + (gd_240 - gd_232) / 2.0; else gd_256 = 0; if (g_low_216 >= gd_232 - (gd_240 - gd_232) / 8.0 && g_high_224 <= 5.0 * (gd_240 - gd_232) / 8.0 + gd_232 && gd_256 == 0.0) gd_248 = gd_232 + (gd_240 - gd_232) / 2.0; else gd_248 = 0; if (g_low_216 >= gd_232 + 7.0 * (gd_240 - gd_232) / 16.0 && g_high_224 <= 13.0 * (gd_240 - gd_232) / 16.0 + gd_232) gd_272 = gd_232 + 3.0 * (gd_240 - gd_232) / 4.0; else gd_272 = 0; if (g_low_216 >= gd_232 + 3.0 * (gd_240 - gd_232) / 8.0 && g_high_224 <= 9.0 * (gd_240 - gd_232) / 8.0 + gd_232 && gd_272 == 0.0) gd_280 = gd_240; else gd_280 = 0; if (g_low_216 >= gd_232 + (gd_240 - gd_232) / 8.0 && g_high_224 <= 7.0 * (gd_240 - gd_232) / 8.0 + gd_232 && gd_248 == 0.0 && gd_256 == 0.0 && gd_272 == 0.0 && gd_280 == 0.0) gd_264 = gd_232 + 3.0 * (gd_240 - gd_232) / 4.0; else gd_264 = 0; if (gd_248 + gd_256 + gd_264 + gd_272 + gd_280 == 0.0) gd_288 = gd_240; else gd_288 = 0; gd_368 = gd_248 + gd_256 + gd_264 + gd_272 + gd_280 + gd_288; if (gd_248 > 0.0) gd_296 = gd_232; else gd_296 = 0; if (gd_256 > 0.0) gd_304 = gd_232 + (gd_240 - gd_232) / 4.0; else gd_304 = 0; if (gd_264 > 0.0) gd_312 = gd_232 + (gd_240 - gd_232) / 4.0; else gd_312 = 0; if (gd_272 > 0.0) gd_320 = gd_232 + (gd_240 - gd_232) / 2.0; else gd_320 = 0; if (gd_280 > 0.0) gd_328 = gd_232 + (gd_240 - gd_232) / 2.0; else gd_328 = 0; if (gd_368 > 0.0 && gd_296 + gd_304 + gd_312 + gd_320 + gd_328 == 0.0) gd_336 = gd_232; else gd_336 = 0; gd_376 = gd_296 + gd_304 + gd_312 + gd_320 + gd_328 + gd_336; gd_192 = (gd_368 - gd_376) / 8.0; gd_384 = gd_376 - 2.0 * gd_192; gd_420 = MathFloor(10000.0 * gd_384 + 0.5) / 10000.0; gd_428 = MathFloor(10000.0 * (gd_384 + 12.0 * gd_192) + 0.5) / 10000.0; if (TimeHour(TimeCurrent()) >= 0 && TimeHour(TimeCurrent()) < finalin + 1 && gi_456 == 0) { gda_392[0] = gd_96; gda_392[1] = gd_104; gda_392[2] = gd_112; gda_392[3] = gd_120; gda_392[4] = gd_128; gda_392[5] = gd_136; gda_392[6] = gd_144; gda_392[7] = gd_152; gd_168 = AccountBalance(); Alert("今日起始資金:", AccountBalance()); Alert("本日第一次進場 ", gda_392[0], " 第二次 ", gda_392[1], " 第三次 ", gda_392[2], " 第四次 ", gda_392[3], " 第五次 ", gda_392[4], " 第六次 ", gda_392[5], " 第七次 ", gda_392[6], " 第八次 ", gda_392[7]); Alert("程式已啟動,將依finalin輸入時間自動進場,依finalout輸入時間自動出場"); gi_456 = 1; g_index_452 = 0; g_ticket_436 = 0; g_ticket_440 = 0; gi_444 = 0; gi_448 = 0; gi_460 = FALSE; } if (gi_456 == 1 && TimeHour(TimeCurrent()) >= finalout) gi_456 = 0; if (TimeHour(TimeCurrent()) >= finalin && TimeHour(TimeCurrent()) < finalout && OrdersTotal() == 0 && gi_456 == 1 && AccountBalance() > gd_168 && gi_460 == TRUE) { Alert("今日起始資金:", gd_168, " 目前資金:", AccountBalance()); Alert("已獲利了結,程式已停止,將於下個交易日重新啟動"); gi_456 = 0; } if (TimeHour(TimeCurrent()) >= finalout && OrdersTotal() != 0 && gi_444 >= 1) { OrderClose(g_ticket_436, gda_392[g_index_452 - 1], Ask, 10, Red); gi_444 = 0; OrderDelete(g_ticket_436); Alert("本日交易時間已過,已全部平倉,系統將於下個交易日重新啟動"); } if (TimeHour(TimeCurrent()) >= finalout && OrdersTotal() != 0 && gi_448 >= 1) { OrderClose(g_ticket_440, gda_392[g_index_452 - 1], Bid, 10, Red); gi_448 = 0; OrderDelete(g_ticket_440); Alert("本日交易時間已過,已全部平倉,系統將於下個交易日重新啟動"); } if (g_index_452 < 3) gd_160 = profit; if (TimeHour(TimeCurrent()) >= finalin && TimeHour(TimeCurrent()) < finalout && gi_464 == FALSE && Ask >= gd_404 + gd_412 - 5.0 * Point && gi_448 == 0 && g_index_452 < 8 && gi_456 == 1 && gd_404 >= iMA(NULL, 0, 1440, 0, MODE_EMA, PRICE_CLOSE, 1)) { Alert("目前價格太接近或超過buy stop,無法下預掛單,請稍待片刻。"); gi_464 = TRUE; } if (TimeHour(TimeCurrent()) >= finalin && TimeHour(TimeCurrent()) < finalout && Ask < gd_404 + gd_412 - 5.0 * Point && gi_448 == 0 && g_index_452 < 8 && gi_456 == 1 && gd_404 >= iMA(NULL, 0, 1440, 0, MODE_EMA, PRICE_CLOSE, 1)) { gi_448 = 1; gd_176 = gd_404 + gd_412; OrderSelect(g_ticket_436, SELECT_BY_TICKET); if (gi_444 == 2 && OrderOpenPrice() >= gd_404 + gd_412) g_ticket_440 = OrderSend(Symbol(), OP_BUYSTOP, gda_392[g_index_452 - 1], gd_404 + gd_412, 0, gd_404 + gd_412 - stoploss * Point, gd_404 + gd_412 + gd_160 * Point, "LONG", 2, 0, Blue); else g_ticket_440 = OrderSend(Symbol(), OP_BUYSTOP, gda_392[g_index_452], gd_404 + gd_412, 0, gd_404 + gd_412 - stoploss * Point, gd_404 + gd_412 + gd_160 * Point, "LONG", 2, 0, Blue); Alert("buy stop掛單"); gi_464 = FALSE; } if (TimeHour(TimeCurrent()) >= finalin && TimeHour(TimeCurrent()) < finalout && gi_464 == FALSE && Bid <= g_price_396 + 5.0 * Point && gi_444 == 0 && g_index_452 < 8 && gi_456 == 1 && g_price_396 <= iMA(NULL, 0, 1440, 0, MODE_EMA, PRICE_CLOSE, 1)) { Alert("目前價格太接近或低於sell stop,無法下預掛單,請稍待片刻。"); gi_464 = TRUE; } if (TimeHour(TimeCurrent()) >= finalin && TimeHour(TimeCurrent()) < finalout && Bid > g_price_396 + 5.0 * Point && gi_444 == 0 && g_index_452 < 8 && gi_456 == 1 && g_price_396 <= iMA(NULL, 0, 1440, 0, MODE_EMA, PRICE_CLOSE, 1)) { gi_444 = 1; gd_184 = g_price_396; OrderSelect(g_ticket_440, SELECT_BY_TICKET); if (gi_448 == 2 && OrderOpenPrice() <= g_price_396) g_ticket_436 = OrderSend(Symbol(), OP_SELLSTOP, gda_392[g_index_452 - 1], g_price_396, 0, g_price_396 + stoploss * Point, g_price_396 - gd_160 * Point, "SHORT", 2, 0, Red); else g_ticket_436 = OrderSend(Symbol(), OP_SELLSTOP, gda_392[g_index_452], g_price_396, 0, g_price_396 + stoploss * Point, g_price_396 - gd_160 * Point, "SHORT", 2, 0, Red); Alert("sell stop掛單"); gi_464 = FALSE; } if (gi_448 == 1 && Open[0] != gd_428 && gd_428 != gd_404 && gd_404 + gd_412 != gd_176 && gi_456 == 1) { OrderDelete(g_ticket_440, Yellow); Alert("buy stop位置改變,刪除buy stop"); gd_176 = gd_404 + gd_412; gi_448 = 0; if (Ask < gd_404 + gd_412 - 5.0 * Point) { OrderSelect(g_ticket_436, SELECT_BY_TICKET); if (gi_444 == 2 && OrderOpenPrice() >= gd_404 + gd_412) g_ticket_440 = OrderSend(Symbol(), OP_BUYSTOP, gda_392[g_index_452 - 1], gd_404 + gd_412, 0, gd_404 + gd_412 - stoploss * Point, gd_404 + gd_412 + gd_160 * Point, "LONG", 2, 0, Blue); else g_ticket_440 = OrderSend(Symbol(), OP_BUYSTOP, gda_392[g_index_452], gd_404 + gd_412, 0, gd_404 + gd_412 - stoploss * Point, gd_404 + gd_412 + gd_160 * Point, "LONG", 2, 0, Blue); Alert("buy stop重新掛單"); gd_176 = gd_404 + gd_412; gi_448 = 1; } } if (gi_444 == 1 && Open[0] != gd_420 && gd_420 != g_price_396 && g_price_396 != gd_184 && gi_456 == 1) { OrderDelete(g_ticket_436, Yellow); Alert("sell stop位置改變,刪除sell stop"); gd_184 = g_price_396; gi_444 = 0; if (Bid > g_price_396 + 5.0 * Point) { OrderSelect(g_ticket_440, SELECT_BY_TICKET); if (gi_448 == 2 && OrderOpenPrice() <= g_price_396) g_ticket_436 = OrderSend(Symbol(), OP_SELLSTOP, gda_392[g_index_452 - 1], g_price_396, 0, g_price_396 + stoploss * Point, g_price_396 - gd_160 * Point, "SHORT", 2, 0, Red); else g_ticket_436 = OrderSend(Symbol(), OP_SELLSTOP, gda_392[g_index_452], g_price_396, 0, g_price_396 + stoploss * Point, g_price_396 - gd_160 * Point, "SHORT", 2, 0, Red); Alert("sell stop重新掛單"); gd_184 = g_price_396; gi_444 = 1; } } if (gi_448 == 1 && High[0] >= gd_404 && gi_456 == 1) { gi_448 = 2; g_index_452++; Alert("buy單進場"); OrderDelete(g_ticket_436, Yellow); OrderClose(g_ticket_436, gda_392[g_index_452 - 2], Ask, 15, Red); gi_444 = 0; Alert("刪除sell stop"); if (g_index_452 >= 4 && g_index_452 <= 5) gd_160 = (gd_168 - AccountBalance()) / (gda_392[g_index_452 - 1]) / 10.0 + 10.0; if (g_index_452 >= 6) gd_160 = (gd_168 - AccountBalance()) / (gda_392[g_index_452 - 1]) / 10.0 + 3.0; OrderModify(g_ticket_440, 0, gd_176 - stoploss * Point, gd_176 + gd_160 * Point, 0, Blue); } if (gi_444 == 1 && Low[0] <= g_price_396 && gi_456 == 1) { gi_444 = 2; g_index_452++; Alert("sell單進場"); OrderDelete(g_ticket_440, Yellow); OrderClose(g_ticket_440, gda_392[g_index_452 - 2], Bid, 15, Red); gi_448 = 0; Alert("刪除buy stop"); if (g_index_452 >= 4 && g_index_452 <= 5) gd_160 = (gd_168 - AccountBalance()) / (gda_392[g_index_452 - 1]) / 10.0 + 10.0; if (g_index_452 >= 6) gd_160 = (gd_168 - AccountBalance()) / (gda_392[g_index_452 - 1]) / 10.0 + 3.0; OrderModify(g_ticket_436, 0, gd_184 + stoploss * Point, gd_184 - gd_160 * Point, 0, Blue); } if (gi_448 == 1 && gd_404 < iMA(NULL, 0, 1440, 0, MODE_EMA, PRICE_CLOSE, 1) && gi_456 == 1 && Ask < gd_404 - 5.0 * Point) { OrderDelete(g_ticket_440, Yellow); gi_448 = 0; Alert("buy stop低於均線,刪除buy stop"); } if (gi_444 == 1 && g_price_396 > iMA(NULL, 0, 1440, 0, MODE_EMA, PRICE_CLOSE, 1) && gi_456 == 1 && Bid > g_price_396 + 5.0 * Point) { OrderDelete(g_ticket_436, Yellow); gi_444 = 0; Alert("sell stop高於均線,刪除sell stop"); } if (gi_460 == TRUE && gi_448 == 1 && gi_456 == 0) { OrderDelete(g_ticket_440, Yellow); gi_448 = 0; } if (gi_460 == TRUE && gi_444 == 1 && gi_456 == 0) { OrderDelete(g_ticket_436, Yellow); gi_444 = 0; } OrderSelect(g_ticket_440, SELECT_BY_TICKET); if (gi_448 == 2 && High[0] >= gd_176 + gd_160 * Point && gi_456 == 1 && AccountBalance() > gd_168) { gi_460 = TRUE; gi_448 = 0; Alert("今日起始資金:", gd_168, " 目前資金:", AccountBalance()); Alert("恭喜,今日已獲利了結,程式已停止,將於下個交易日重新啟動"); gi_456 = 0; } if (gi_448 == 2 && Low[0] <= g_price_396 && gi_456 == 1) { OrderClose(g_ticket_440, gda_392[g_index_452 - 1], Bid, 15, Red); gi_448 = 0; if (OrderOpenPrice() <= g_price_396) g_index_452--; } if (gi_448 == 2 && Low[0] <= gd_176 - stoploss * Point && Bid <= gd_176 - (stoploss - 2) * Point) gi_448 = 0; OrderSelect(g_ticket_436, SELECT_BY_TICKET); if (gi_444 == 2 && Low[0] <= gd_184 - gd_160 * Point && gi_456 == 1 && AccountBalance() > gd_168) { gi_460 = TRUE; gi_444 = 0; Alert("今日起始資金:", gd_168, " 目前資金:", AccountBalance()); Alert("恭喜,今日已獲利了結,程式已停止,將於下個交易日重新啟動"); gi_456 = 0; } if (gi_444 == 2 && High[0] >= gd_404 && gi_456 == 1) { OrderClose(g_ticket_436, gda_392[g_index_452 - 1], Ask, 15, Red); gi_444 = 0; if (OrderOpenPrice() >= gd_404 + gd_412) g_index_452--; } if (gi_444 == 2 && High[0] >= gd_184 + stoploss * Point && Bid >= gd_184 + (stoploss - 2) * Point) gi_444 = 0; return (0); }