Rabu, 18 Juli 2012

CODING EA PIPLASER

CODING EA PIPLASER
 
#property copyright “The PipLaser Team”
#property link      “”
#include <WinUser32.mqh>
#import “kernel32.dll”
int GetTimeZoneInformation(int& a0[]);
#import
/*#import “PipLaser.dll”
void Activate(string a0, int a1, int a2, string a3, int a4);
int GetState();
int GetGmtOffset(int a0, int a1, double& a2[]);
bool open_buy(double a0, double a1, int a2, int a3, double a4, double a5, int a6, double a7, int a8);
bool open_sell(double a0, double a1, int a2, int a3, double a4, double a5, int a6, double a7, int a8);
bool trade_time(int a0);
#import*/
extern string ver.1.00 = “PipLaser”;
//extern string AuthCode = “”;
extern string Trading = “Trade Management”;
extern double MinLotSize = 0.01;
extern double MaxLotSize = 10.0;
extern double TradeLevel = 20.0;
extern bool EquityMode = TRUE;
extern bool StealthMode = FALSE;
extern int PipTarget = 8;
extern int StopLoss = 50;
extern int TimeProtect = 120;
extern string Broker = “Broker Management”;
extern int GmtOffset = 1;
extern bool AutoGmtOffset = TRUE;
extern int MaxSpread = 5;
extern int Reference = 201007;
int g_period_168 = 11;
int gi_172 = 7;
extern string DrawSettings = “Screen Settings”;
extern int TopPadding = 20;
extern int LeftPadding = 20;
extern color TextColor1 = Gold;
extern color TextColor2 = DarkOrange;
int g_datetime_200;
int gi_204;
int gi_208 = 0;
int gi_216 = 0;
string gs_220;
string gsa_228[] = {“.”, “..”, “…”, “….”, “…..”};
int gi_240 = 0;
int gi_244 = 0;
int gi_248 = 0;
int gi_252;
int gi_256;
int gi_260;
int gi_264;
int gi_268 = -1;
//string gs_272 = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
bool gi_292;
bool gi_300;
string CPrint(bool ai_0, string as_4, string as_12 = “”) {
if (ai_0) return (as_4);
return (as_12);
}
/*string PPrint(int ai_0) {
int li_4 = MathMod(ai_0, 5);
return (gsa_228[li_4]);
}
void PrintResponse(int ai_0, int ai_4 = -1, int ai_8 = -1) {
bool li_12 = FALSE;
if (gi_268 != ai_0) {
li_12 = TRUE;
gi_268 = ai_0;
}
if (ai_4 == -1) ai_4 = gi_244;
if (ai_8 == -1) ai_8 = gi_240;
gi_244 = ai_4;
gi_240 = ai_8;
if (ai_0 & 16384 > 0) PrintLNL(li_12, “Authenticated”, TextColor1);
else PrintLNL(li_12, “Authentication failed – error(” + ai_0 + “)”, TextColor1);
if (ai_0 & 512 > 0) PrintLNL(li_12, “Attention: Upgrade available”, TextColor1);
if (ai_0 & 1024 > 0) PrintLNL(li_12, “Error: Upgrade required”, TextColor1);
if (ai_0 & 1 > 0) PrintLNL(li_12, “Error: WinINet initialisation failed”, TextColor1);
if (ai_0 & 2 > 0) PrintLNL(li_12, “Error: WinINet connection failed”, TextColor1);
if (ai_0 & 4 > 0) PrintLNL(li_12, “Error: Invalid account number”, TextColor1);
if (ai_0 & 8 > 0) PrintLNL(li_12, “Error: Invalid account status”, TextColor1);
if (ai_0 & 16 > 0) PrintLNL(li_12, “Error: Dll and Expert versions mismatch”, TextColor1);
if (ai_0 & 128 > 0) PrintLNL(li_12, “Error: Unable to retrieve authentication code”, TextColor1);
if (ai_0 & 256 > 0) PrintLNL(li_12, “Error: Server response failure”, TextColor1);
if (ai_0 & 2048 > 0) PrintLNL(li_12, “Error: Invalid authorisation details”, TextColor1);
if (ai_0 & 4096 > 0) PrintLNL(li_12, “Error: Authorisation declined”, TextColor1);
}
*/
string GetObjName(int ai_0) {
return (StringConcatenate(“PipLaser”, ” lb: “, ai_0));
}
void GetPos(int ai_0, int &ai_4, int &ai_8) {
string l_name_12 = GetObjName(ai_0);
if (ObjectFind(l_name_12) == 0) {
ai_4 = ObjectGet(l_name_12, OBJPROP_XDISTANCE);
ai_8 = ObjectGet(l_name_12, OBJPROP_YDISTANCE);
}
}
/*void PrintLNL(bool ai_0, string as_4, int ai_12 = -1, int ai_16 = -1, double ad_20 = -1.0, int ai_28 = 0) {
PrintLN(as_4, ai_12, ai_16, ad_20, ai_28);
if (ai_0) Print(as_4);
}*/
void PrintLN(string a_text_0, color a_color_8 = -1, int ai_12 = -1, double ad_16 = -1.0, int ai_24 = 0) {
if (a_color_8 == CLR_NONE) a_color_8 = TextColor1;
if (ai_12 == -1) ai_12 = gi_244;
if (ad_16 == -1.0) ad_16 = gi_240;
string l_name_28 = GetObjName(ai_12);
if (ObjectFind(l_name_28) != 0) {
ObjectCreate(l_name_28, OBJ_LABEL, 0, 0, 0);
ObjectSet(l_name_28, OBJPROP_CORNER, 0);
}
ObjectSetText(l_name_28, a_text_0, 8, “Tahoma”, a_color_8);
ObjectSet(l_name_28, OBJPROP_XDISTANCE, gi_256 + ai_24);
ObjectSet(l_name_28, OBJPROP_YDISTANCE, gi_252 + 14.0 * ad_16);
if (gi_240 < ad_16 + 1.0) gi_240 = ad_16 + 1.0;
if (gi_244 < ai_12 + 1) gi_244 = ai_12 + 1;
if (gi_248 < ai_12) gi_248 = ai_12;
}
void PrintSep(int ai_0 = -1, double ad_4 = -1.0, int ai_12 = 0) {
if (ai_0 == -1) ai_0 = gi_244;
if (ad_4 == -1.0) ad_4 = gi_240;
PrintLN(“_______”, TextColor2, ai_0, ad_4 – 0.3, ai_12);
if (gi_240 < ad_4 + 1.0) gi_240 = ad_4 + 1.0;
}
void Deleteobjects(int ai_0, int ai_4) {
for (int li_8 = ai_0; li_8 <= ai_4; li_8++) ObjectDelete(GetObjName(li_8));
}
/*double Base36Decode(string as_0) {
int li_24;
as_0 = StringUpper(as_0);
int l_str_len_8 = StringLen(as_0);
double ld_ret_12 = 0;
for (int li_20 = 0; li_20 < l_str_len_8; li_20++) {
li_24 = StringFind(gs_272, StringSubstr(as_0, l_str_len_8 – li_20 – 1, 1));
ld_ret_12 += li_24 * MathPow(36, li_20);
}
return (ld_ret_12);
}
string Base36Encode(double ad_0) {
string l_str_concat_8 = “”;
for (ad_0 = MathAbs(ad_0); ad_0 >= 1.0; ad_0 = MathFloor(ad_0 / 36.0)) l_str_concat_8 = StringConcatenate(StringSubstr(gs_272, MathMod(ad_0, 36), 1), l_str_concat_8);
return (l_str_concat_8);
}
string StringUpper(string as_0) {
int li_8;
int li_20;
int l_str_len_16 = StringLen(as_0);
for (int li_12 = 0; li_12 < l_str_len_16; li_12++) {
li_20 = 0;
li_8 = StringGetChar(as_0, li_12);
if (li_8 > ‘`’ && li_8 < ‘{‘) li_20 = li_8 – 32;
if (li_8 > ‘ß’ && li_8 < 256) li_20 = li_8 – 32;
if (li_8 == ‘¸’) li_20 = 168;
if (li_20 > 0) as_0 = StringSetChar(as_0, li_12, li_20);
}
return (as_0);
}
*/
double OrderSize() {
double ld_ret_0;
double l_lotsize_8 = MarketInfo(Symbol(), MODE_LOTSIZE);
double ld_16 = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2);
double ld_24 = NormalizeDouble(MarketInfo(Symbol(), MODE_TICKVALUE), 2);
double ld_32 = NormalizeDouble(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 2);
int li_40 = 2;
if (ld_16 == 0.1) li_40 = 1;
else
if (ld_16 > 0.1) li_40 = 0;
double ld_44 = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), li_40);
double ld_52 = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), li_40);
if (TradeLevel < 0.0) ld_ret_0 = MathAbs(TradeLevel);
else {
if (EquityMode) ld_ret_0 = NormalizeDouble(AccountEquity() * TradeLevel / 100.0 / StopLoss / ld_24 * ld_16, li_40);
else ld_ret_0 = NormalizeDouble(AccountFreeMargin() * TradeLevel / l_lotsize_8, li_40);
}
if (ld_ret_0 < MinLotSize) ld_ret_0 = NormalizeDouble(MinLotSize, li_40);
if (ld_ret_0 > MaxLotSize) ld_ret_0 = NormalizeDouble(MaxLotSize, li_40);
if (ld_ret_0 < ld_44) ld_ret_0 = NormalizeDouble(ld_44, li_40);
if (ld_ret_0 > ld_52) ld_ret_0 = NormalizeDouble(ld_52, li_40);
return (ld_ret_0);
}
double PointValue() {
if (MarketInfo(Symbol(), MODE_DIGITS) == 5.0 || MarketInfo(Symbol(), MODE_DIGITS) == 3.0) return (10.0 * Point);
return (Point);
}
double TimeProtect() {
for (int l_pos_0 = OrdersTotal() – 1; l_pos_0 >= 0; l_pos_0–) {
OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Reference) {
if (g_datetime_200 – OrderOpenTime() >= 60 * TimeProtect && OrderProfit() >= 10.0 * OrderLots()) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), 1, Green);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), 1, Red);
}
}
}
return (0.0);
}
double ClosedProfit() {
double ld_ret_0 = 0;
for (int l_pos_8 = OrdersHistoryTotal() – 1; l_pos_8 >= 0; l_pos_8–) {
OrderSelect(l_pos_8, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Reference && TimeYear(OrderCloseTime()) == TimeYear(g_datetime_200) && TimeMonth(OrderCloseTime()) == TimeMonth(g_datetime_200) &&
TimeDay(OrderCloseTime()) == TimeDay(g_datetime_200)) ld_ret_0 += OrderProfit();
}
return (ld_ret_0);
}
double OpenProfit() {
double ld_ret_0 = 0;
for (int l_pos_8 = OrdersTotal() – 1; l_pos_8 >= 0; l_pos_8–) {
OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Reference) ld_ret_0 += OrderProfit();
}
return (ld_ret_0);
}
bool OpenTrades() {
for (int l_pos_0 = OrdersTotal() – 1; l_pos_0 >= 0; l_pos_0–) {
OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Reference) return (TRUE);
}
return (FALSE);
}
void CheckForOpen() {
double l_ifractals_0;
double l_ifractals_8;
double l_ifractals_16;
double l_ifractals_24;
HideTestIndicators(TRUE);
for (int li_32 = 1; li_32 < Bars; li_32++) {
if (iFractals(NULL, PERIOD_M15, MODE_UPPER, li_32) != 0.0) {
l_ifractals_0 = iFractals(NULL, PERIOD_M15, MODE_UPPER, li_32);
break;
}
}
for (li_32 = 1; li_32 < Bars; li_32++) {
if (iFractals(NULL, PERIOD_M15, MODE_LOWER, li_32) != 0.0) {
l_ifractals_8 = iFractals(NULL, PERIOD_M15, MODE_LOWER, li_32);
break;
}
}
for (li_32 = 1; li_32 < Bars; li_32++) {
if (iFractals(NULL, PERIOD_H1, MODE_UPPER, li_32) != 0.0) {
l_ifractals_16 = iFractals(NULL, PERIOD_H1, MODE_UPPER, li_32);
break;
}
}
for (li_32 = 1; li_32 < Bars; li_32++) {
if (iFractals(NULL, PERIOD_H1, MODE_LOWER, li_32) != 0.0) {
l_ifractals_24 = iFractals(NULL, PERIOD_H1, MODE_LOWER, li_32);
break;
}
}
double ld_36 = MathRound((l_ifractals_0 – l_ifractals_8) / PointValue());
double ld_44 = MathRound((l_ifractals_16 – l_ifractals_24) / PointValue());
double ld_52 = l_ifractals_0 – (l_ifractals_0 – l_ifractals_8) / 2.0;
bool li_60 = FALSE;
if (iClose(Symbol(), PERIOD_M15, 0) <= l_ifractals_16 && iClose(Symbol(), PERIOD_M15, 0) >= l_ifractals_24) li_60 = TRUE;
bool li_64 = FALSE;
bool li_68 = FALSE;
if (Ask <= NormalizeDouble(iMA(Symbol(), PERIOD_M5, g_period_168, 0, MODE_SMA, PRICE_OPEN, 0), Digits) – 5.0 * PointValue()) li_64 = TRUE;
if (Bid >= NormalizeDouble(iMA(Symbol(), PERIOD_M5, g_period_168, 0, MODE_SMA, PRICE_OPEN, 0), Digits) + 5.0 * PointValue()) li_68 = TRUE;
double ld_72 = 10000.0;
int li_80 = 6;
int li_84 = 0;
ld_72 /= (li_80 – li_84);
double l_ima_88 = iMA(NULL, PERIOD_M1, g_period_168, 0, MODE_EMA, PRICE_CLOSE, li_84 + 0);
double l_ima_96 = iMA(NULL, PERIOD_M1, g_period_168, 0, MODE_EMA, PRICE_CLOSE, li_80 + 0);
double ld_104 = ld_72 * (l_ima_88 – l_ima_96);
if (open_buy(Ask, Bid, MaxSpread, li_60, ld_104, ld_52, gi_172, PointValue(), li_64)) {
OrderSend(Symbol(), OP_BUY, OrderSize(), NormalizeDouble(Ask, Digits), 2, 0, 0, “”, Reference, 0, Green);
Sleep(1000);
}
if (open_sell(Ask, Bid, MaxSpread, li_60, ld_104, ld_52, gi_172, PointValue(), li_68)) {
OrderSend(Symbol(), OP_SELL, OrderSize(), NormalizeDouble(Bid, Digits), 2, 0, 0, “”, Reference, 0, Red);
Sleep(1000);
}
}
void init() {
double l_global_var_4;
double ld_12;
gi_256 = LeftPadding;
gi_252 = TopPadding;
if (gi_260 != LeftPadding || gi_264 != TopPadding) {
gi_260 = LeftPadding;
gi_264 = TopPadding;
} else GetPos(0, gi_256, gi_252);
gi_244 = 0;
gi_240 = 0;
gs_220 = “PipLaser” + ” ver: ” + “1.00″ + CPrint(IsTesting(), ” (backtesting)”, “”);
PrintLN(gs_220, TextColor2);
PrintSep();
ObjectsRedraw();
/*for (int l_count_0 = 0; !IsStopped() && !IsConnected() || StringLen(AccountName()) <= 0; l_count_0++) {
PrintLN(“Waiting for connection” + PPrint(l_count_0), TextColor1, 2, 2);
ObjectsRedraw();
Sleep(150);
}
PrintLN(“Authentication…”, TextColor1, 2, 2);
ObjectsRedraw();
gi_216 = 0;
AuthCode = StringTrimLeft(StringTrimRight(AuthCode));
if (StringLen(AuthCode) <= 0) {
if (GlobalVariableCheck(“GV_PipLaser_REC”)) {
l_global_var_4 = GlobalVariableGet(“GV_PipLaser_REC”);
AuthCode = Base36Encode(l_global_var_4);
} else gi_216 |= 32;
} else {
ld_12 = Base36Decode(AuthCode);
if (GlobalVariableSet(“GV_PipLaser_REC”, ld_12) == 0) gi_216 |= 64;
}
Activate(“1.00″, AccountNumber(), IsDemo(), AuthCode, 1);
gi_212 = GetState();
gi_212 |= gi_216;
PrintResponse(gi_212, 2, 2);
PrintSep();
ObjectsRedraw();*/
gi_292 = StringFind(Symbol(), “USDCAD”) < 0;
gi_300 = TRUE;
}
void deinit() {
if (IsTesting() == 0) {
switch (UninitializeReason()) {
case REASON_CHARTCLOSE:
case REASON_REMOVE:
Deleteobjects(0, gi_248);
gi_248 = 0;
return;
case REASON_RECOMPILE:
case REASON_CHARTCHANGE:
case REASON_PARAMETERS:
case REASON_ACCOUNT:
Deleteobjects(1, gi_248);
gi_248 = 1;
}
}
}
void start() {
double l_price_4;
double l_price_12;
if (gi_300) {
if (gi_292) MessageBox(“You have selected the wrong currency pair!\nCorrect currency pair is USDCAD.”, gs_220 + “: Warning”, MB_ICONEXCLAMATION);
gi_300 = FALSE;
}
if (gi_292 == 0) {
//gi_212 = GetState();
g_datetime_200 = TimeCurrent();
if (!IsTesting() && AutoGmtOffset) {
//double lda_0[1] = {0};
//if (gi_208 != 0)
GmtOffset = GetGmtOffset();//lda_0[0];
//gi_208 = MathMod(24+Hour()-GMTOffset,24);//GetGmtOffset();//g_datetime_200, 1, lda_0);
}
gi_204 = g_datetime_200 – 3600.0 * GmtOffset;
if (!IsTesting() || IsVisualMode()) {
GetPos(0, gi_256, gi_252);
gi_244 = 0;
gi_240 = 0;
PrintLN(gs_220, TextColor2);
PrintSep();
//PrintResponse(gi_212 | gi_216);
//PrintSep();
PrintLN(“ServerTime:”);
PrintLN(TimeToStr(g_datetime_200), TextColor2, gi_244, gi_240 – 1, 60);
PrintLN(“UtcTime:”);
PrintLN(TimeToStr(gi_204), TextColor2, gi_244, gi_240 – 1, 45);
PrintLN(“GmtOffset:”);
PrintLN(StringConcatenate(DoubleToStr(GmtOffset, 1), CPrint(!IsTesting() && AutoGmtOffset, ” (automatic)”, ” (manual)”)), TextColor2, gi_244, gi_240 – 1, 50);
PrintSep();
PrintLN(“Closed Trade P/L:”);
PrintLN(DoubleToStr(ClosedProfit(), 2), TextColor2, gi_244, gi_240 – 1, 85);
PrintLN(“Open Trade P/L:”);
PrintLN(DoubleToStr(OpenProfit(), 2), TextColor2, gi_244, gi_240 – 1, 75);
PrintLN(“Balance:”);
PrintLN(DoubleToStr(AccountBalance(), 2), TextColor2, gi_244, gi_240 – 1, 40);
PrintLN(“Equity:”);
PrintLN(DoubleToStr(AccountEquity(), 2), TextColor2, gi_244, gi_240 – 1, 40);
PrintLN(“Free Margin:”);
PrintLN(DoubleToStr(AccountFreeMargin(), 2), TextColor2, gi_244, gi_240 – 1, 60);
PrintLN(“Margin Required:”);
PrintLN(StringConcatenate(DoubleToStr(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 2), ” per $”, DoubleToStr(MarketInfo(Symbol(), MODE_LOTSIZE), 2), ” position”), TextColor2, gi_244, gi_240 – 1, 80);
PrintLN(“Pending Order Size:”);
PrintLN(StringConcatenate(DoubleToStr(OrderSize(), 2), ” lots @ $”, DoubleToStr(MarketInfo(Symbol(), MODE_TICKVALUE), 2), ” per tick per “, DoubleToStr(MarketInfo(Symbol(), MODE_MINLOT), 2), ” lots”), TextColor2, gi_244, gi_240 – 1, 95);
Deleteobjects(gi_244, gi_248);
gi_248 = gi_244 – 1;
ObjectsRedraw();
}
if (OpenTrades()) {
if (TimeProtect > 0) TimeProtect();
for (int l_pos_20 = OrdersTotal() – 1; l_pos_20 >= 0; l_pos_20–) {
OrderSelect(l_pos_20, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Reference) {
if (OrderType() == OP_BUY) {
if (OrderOpenPrice() – Ask >= PointValue() * StopLoss || Ask – OrderOpenPrice() >= PointValue() * PipTarget) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), 1, Green);
else {
if (!StealthMode && OrderStopLoss() == 0.0 || OrderTakeProfit() == 0.0) {
l_price_4 = NormalizeDouble(OrderOpenPrice() + PointValue() * PipTarget, Digits);
l_price_12 = NormalizeDouble(OrderOpenPrice() – PointValue() * StopLoss, Digits);
OrderModify(OrderTicket(), OrderOpenPrice(), l_price_12, l_price_4, 0, Green);
}
}
}
if (OrderType() == OP_SELL) {
if (OrderOpenPrice() – Bid >= PointValue() * PipTarget || Bid – OrderOpenPrice() >= PointValue() * StopLoss) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), 1, Red);
else {
if (!StealthMode && OrderStopLoss() == 0.0 || OrderTakeProfit() == 0.0) {
l_price_4 = NormalizeDouble(OrderOpenPrice() – PointValue() * PipTarget, Digits);
l_price_12 = NormalizeDouble(OrderOpenPrice() + PointValue() * StopLoss, Digits);
OrderModify(OrderTicket(), OrderOpenPrice(), l_price_12, l_price_4, 0, Red);
}
}
}
}
}
}
if (trade_time(gi_204) && !OpenTrades()) CheckForOpen();
}
}
bool open_buy(double a1, double a2, int a3, bool a4, double a5, double a6, int a7, double a8, bool a9) {
return (a1-a2<a3*a8 && a4 && a5<=-0.12 && a2<=a6-a8*a7 && a9);
}
bool open_sell(double a1, double a2, int a3, bool a4, double a5, double a6, int a7, double a8, bool a9) {
return (a1-a2<a3*a8 && a4 && a5>=0.12 && a6-a8*a7<=a1 && a9);
}
bool trade_time(int time) {
if (DayOfWeek()>0) {
if (TimeHour(time) != 22) return (false);
}
else {
if (TimeHour(time) != 22 || Minute() < 30 ) return (false);
}
if (Month() == 10 ) {
if (TimeDay(time) == 17) return (false);
if (TimeDay(time)==27) return (false);
}
else if (Month() == 11) {
if (TimeDay(time) == 1) return (false);
if (TimeDay(time)==23) return (false);
}
return (true);
}
double TimeZoneLocal() {
int lia_0[43];
switch (GetTimeZoneInformation(lia_0)) {
case 0:
return (lia_0[0] / (-60.0));
case 1:
return (lia_0[0] / (-60.0));
case 2:
return ((lia_0[0] + lia_0[42]) / (-60.0));
}
return (0);
}
double GetGmtOffset() {
int li_0 = (TimeCurrent() – TimeLocal()) / 60;
int li_4 = MathRound(li_0 / 30.0);
li_0 = 30 * li_4;
double ld_ret_8 = TimeZoneLocal() + li_0 / 60.0;
return (ld_ret_8);
}

Tidak ada komentar:

Posting Komentar