Zig dan Zag Ultimate Investment
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «zig_dan_zag_danu_ultimate_investment_long_term.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торговый экспертный советник для платформы MetaTrader 4, созданный с помощью Molanis Strategy Builder. Советник анализирует соотношение цен закрытия и открытия предыдущей свечи в сочетании с пользовательским индикатором ZigZag для формирования торговых сигналов на покупку и продажу.
В советнике реализованы управление денежными средствами (мартерингейл, корректировка лота при убытках), стоп-лосс с отслеживанием, ограничение торговли по времени, а также система оповещений и отправка уведомлений по электронной почте. Поддерживается работа как с 4-значными, так и с 5-значными брокерами.
Советник позволяет задавать магические номера для идентификации позиций, включает механизм повторных попыток выполнения ордеров при ошибках сервера и поддерживает режимы как прямой торговли, так и отправки алертов без реальных сделок.
Настройки программы
| Настройка | Описание |
|---|---|
| Expert Advisor Name (EAName) | Имя советника — Имя экспертного советника |
| Define execution by bars or ticks (CompletedBars) | Выполнение по свечам — Определяет выполнение по свечам (true) или по тикам (false) |
| Define execution. True allows trading, false sends Alerts (TradeOrAlert) | Режим торговли или алертов — true — разрешает торговлю, false — отправляет алерты без реальных сделок |
| If ON, sends mail with order execution info (SendMailMode) | Отправка уведомлений по почте — При включении отправляется электронная почта с информацией об исполнении ордеров |
| If ON, Plays a sound when orders/alarms are executed (PlaySounds) | Воспроизведение звуков — При включении воспроизводится звук при выполнении ордеров или алармов |
| Sound to be played when orders/alarms are executed (MySound) | Звуковой файл оповещения — Звуковой файл, воспроизводимый при выполнении ордеров или алармов |
| if false, broker uses 4 digits (FiveDigits) | 5-значное котирование — Указывает, использует ли брокер 5-значное котирование (true) или 4-значное (false) |
| If on, trades only when tradingtimestart<hour<tradingtimestart (UseTradingTime) | Использование торгового времени — При включении торговля осуществляется только в заданные торговые часы |
| i.e 9 = 9 am (TradingTimeStart) | Начало торгового времени — Час начала торгового времени (например, 9 — 9 утра) |
| i.e 16 = 4 pm (TradingTimeEnd) | Конец торгового времени — Час окончания торгового времени (например, 16 — 4 часа дня) |
| Action before/after Trading Hours (ClosePositionsNonTH) | Закрытие позиций вне торговых часов — Определяет действие с позициями до или после торговых часов |
| If false, orders are opened and later TP/SL is added (OrderIncludeTPSL) | TP/SL в начальном ордере — Если false, ордера открываются без TP/SL, которые добавляются позже |
| max open positions (MaxNumberofPositions) | Максимальное число позиций — Максимальное количество открытых позиций |
| if there is an error executing orders, the script retries MaxOrderRetry times (MaxOrderRetry) | Максимальное число попыток ордера — Количество повторных попыток выполнения ордера при ошибке |
| Turns on/off max risk condition (UseMaximumPercentageatRisk) | Максимальный риск — Включает или выключает условие максимального риска |
| i.e max size of trade = 2 = 2% of equity (MaximumPercentageatRisk) | Максимальный процент риска — Максимальный процент риска от собственного капитала (например, 2 — это 2% от equity) |
| Turns on/off risk ratio (UseRiskRatio) | Соотношение риска — Включает или выключает соотношение риска |
| i.e. RiskRatio=3 means that TakeProfit/StopLoss = 3 (RiskRatio) | Соотношение риска — Соотношение риска (например, 3 означает TakeProfit/StopLoss = 3) |
| Turns on/off lot management (UseLotManagement) | Управление лотом — Включает или выключает управление лотом |
| 1 - Uses Decrease factor (LotManagementType) | Тип управления лотом — Тип управления лотом: 1 — с использованием коэффициента уменьшения, 2 — с использованием фиксированных факторов (75%, 50%, 25%) |
| for money management lot-(lot*losses/ReductionFactor) (ReductionFactor) | Коэффициент уменьшения — Коэффициент уменьшения лота при убытках (lot - lot*losses/ReductionFactor) |
| Turns martingale (UseMartingale) | Мартингейл — Включает или выключает мартингейл |
| i.e 2 = double next lot size (MartingaleMultiplier) | Множитель мартингейла — Множитель мартингейла (например, 2 — удвоение размера лота) |
| use martingale after losses (afterLoss) | Мартингейл после убытков — Использует мартингейл после убытков |
| use martingale (anti martingale) after Win (afterWin) | Анти-мартингейл после выигрышей — Использует мартингейл (анти-мартингейл) после выигрышей |
| Minimum slippage accepted (Slippage) | Проскальзывание — Минимально допустимое проскальзывание |
| Used to change value or backtest Lot Size (S_Symbol_LS_0) | Размер лота продажи — Значение размера лота для сделки на продажу (используется для бэктеста или корректировки) |
| Used to change value or backtest Take Profit (S_Symbol_TP_0) | Тейк-профит продажи — Значение тейк-профита для сделки на продажу (в пипсах, используется для бэктеста или корректировки) |
| Used to change value or backtest Stop Loss (S_Symbol_SL_0) | Стоп-лосс продажи — Значение стоп-лосса для сделки на продажу (в пипсах, используется для бэктеста или корректировки) |
| Used to change value or backtest Trailing Stop (S_Symbol_TS_0) | Трейлинг-стоп продажи — Значение трейлинг-стопа для сделки на продажу (в пипсах, используется для бэктеста или корректировки) |
| Used to change value or backtest Lot Size (B_Symbol_LS_0) | Размер лота покупки — Значение размера лота для сделки на покупку (используется для бэктеста или корректировки) |
| Used to change value or backtest Take Profit (B_Symbol_TP_0) | Тейк-профит покупки — Значение тейк-профита для сделки на покупку (в пипсах, используется для бэктеста или корректировки) |
| Used to change value or backtest Stop Loss (B_Symbol_SL_0) | Стоп-лосс покупки — Значение стоп-лосса для сделки на покупку (в пипсах, используется для бэктеста или корректировки) |
| Used to change value or backtest Trailing Stop (B_Symbol_TS_0) | Трейлинг-стоп покупки — Значение трейлинг-стопа для сделки на покупку (в пипсах, используется для бэктеста или корректировки) |
| Identifies long positions (MagicNumberLong) | Магический номер длинных позиций — Магический номер для идентификации длинных позиций |
| Identifies short positions (MagicNumberShort) | Магический номер коротких позиций — Магический номер для идентификации коротких позиций |
| Set to false if you do not want warnings/alerts (ShowWarnings) | Показывать предупреждения — При значении false предупреждения и алерты не отображаются |
| Checks trailing stops every tick regardless of Execution Mode (Bars or ticks) (CheckTSEveryTick) | Проверка трейлинг-стопа каждый тик — При включении проверка трейлинг-стопа выполняется каждый тик вне зависимости от режима обработки (по свечам или по тикам) |
| True means use time based trailing stop (UseTimeBasedTS) | Временной трейлинг-стоп — true — используется временной трейлинг-стоп |
| Every TimeBasedTS minutes (TimeBasedTS) | Интервал трейлинг-стопа по времени — Интервал в минутах для проверки трейлинг-стопа на основе времени |
| Allow hedging variable (Hedge) | Режим хеджирования — Разрешает работу в режиме хеджирования |
Поиск по коду файла
/*| */
#define SleepTime 250 //To sleep for a while before retrying order execution
extern string EAName="Zig dan Zag Ultimate Investment"; // Expert Advisor Name
extern bool IsMicroAccount = true; // Define if account is micro or standard
extern bool CompletedBars = true; // Define execution by bars or ticks
extern bool TradeOrAlert = true; // Define execution. True allows trading, false sends Alerts
extern bool SendMailMode = false; // If ON, sends mail with order execution info
extern bool PlaySounds = false; // If ON, Plays a sound when orders/alarms are executed
extern string MySound="alert.wav"; // Sound to be played when orders/alarms are executed
extern bool FiveDigits = true; //if false, broker uses 4 digits
int PipMultiplier = 1; // to multiply positions by 10 when 5 digits is true
extern bool UseTradingTime = false; // If on, trades only when tradingtimestart<hour<tradingtimestart
extern int TradingTimeStart = 9; // i.e 9 = 9 am
extern int TradingTimeEnd = 16; // i.e 16 = 4 pm
extern bool ClosePositionsNonTH = false; // Action before/after Trading Hours
extern bool OrderIncludeTPSL = true; // If false, orders are opened and later TP/SL is added
extern int MaxNumberofPositions = 1; // max open positions
extern int MaxOrderRetry = 100; // if there is an error executing orders, the script retries MaxOrderRetry times
static color BuyColor = Green; // color to identify buy orders
static color SellColor = Red; // color to identify sell orders
bool AutoAdjustSLTP = false; // to turn on/off stop loss autoadjustment. Adjust SL to three times the minimum SL allowed
extern bool UseMaximumPercentageatRisk = false; // Turns on/off max risk condition
extern double MaximumPercentageatRisk = 1; // i.e max size of trade = 2 = 2% of equity
extern bool UseRiskRatio = false; // Turns on/off risk ratio
extern int RiskRatio = 3; // i.e. RiskRatio=3 means that TakeProfit/StopLoss = 3
extern bool UseLotManagement = false; // Turns on/off lot management
extern int LotManagementType = 2; // 1 - Uses Decrease factor
extern double ReductionFactor = 5; // for money management lot-(lot*losses/ReductionFactor)
extern bool UseMartingale = true; // Turns martingale
extern double MartingaleMultiplier = 2.0; // i.e 2 = double next lot size
double MaxMartingaleSize = 120.8; // i.e 5 = max lot size is 5
extern bool afterLoss = true; // use martingale after losses
extern bool afterWin = false; // use martingale (anti martingale) after Win
datetime MartingaleTime = 0;
extern int Slippage = 3; // Minimum slippage accepted
extern double S_Symbol_LS_0 = 1.0; //Used to change value or backtest Lot Size
extern double S_Symbol_TP_0 = 0; //Used to change value or backtest Take Profit
extern double S_Symbol_SL_0 = 0; //Used to change value or backtest Stop Loss
extern double S_Symbol_TS_0 = 50; //Used to change value or backtest Trailing Stop
extern double B_Symbol_LS_0 = 1.0; //Used to change value or backtest Lot Size
extern double B_Symbol_TP_0 = 0; //Used to change value or backtest Take Profit
extern double B_Symbol_SL_0 = 0; //Used to change value or backtest Stop Loss
extern double B_Symbol_TS_0 = 50; //Used to change value or backtest Trailing Stop
/*| */
extern int MagicNumberLong = 6658641; //Identifies long positions
extern int MagicNumberShort = 4167090; //Identifies short positions
string commentlong="Go long "; //Identifies long positions
string commentshort="Go short "; //Identifies short positions
extern bool ShowWarnings=true; //Set to false if you do not want warnings/alerts
int PreviousBarCount = 0; // To count bars
string mailstring = "";
string subject = "EA: ";
extern bool CheckTSEveryTick=false; //Checks trailing stops every tick regardless of Execution Mode (Bars or ticks)
datetime TimeTSCheck = 0;
extern bool UseTimeBasedTS = false; // True means use time based trailing stop
extern int TimeBasedTS = 30; // Every TimeBasedTS minutes
extern bool Hedge=false; //Allow hedging variable
#include <stdlib.mqh>
#include <stderror.mqh>
#include <WinUser32.mqh>
int init()
{
// код доступен только после оплаты
}
int deinit()
{
Print("M-*** EA is stopping !*** Done!");
Comment("");
return(0);
}
int start()
{
// код доступен только после оплаты
}
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2010-02-20 ***
*/
int MolanisAlert(string condition, string sygnaltype, string mypair) {
if (SendMailMode) {
double mybid=MarketInfo(mypair,MODE_BID);
double myask=MarketInfo(mypair,MODE_ASK);
subject = "EA Alert: ";
subject = StringConcatenate(subject,EAName,". ",sygnaltype);
mailstring = "email generated by Molanis Strategy Builder v3.1 \n";
mailstring = StringConcatenate(mailstring, "Server Time=",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),". Terminal Time=",TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS),"\n");
mailstring = StringConcatenate(mailstring, "Alert: ",sygnaltype,"\nForex Signal: ",condition,"\n");
mailstring = StringConcatenate(mailstring, "Price on : ", mypair," BID=",mybid," ASK=",myask,"\n");
mailstring = StringConcatenate(mailstring, "Price on current chart: ", Symbol()," BID=",MarketInfo(Symbol(),MODE_BID)," ASK=",MarketInfo(Symbol(),MODE_ASK),"\n");
SendMail(subject, mailstring);
}
Print("M-Alert:",sygnaltype," Forex Signal: ",condition);
Alert("M-Alert:",sygnaltype," Forex Signal: ",condition);
if (PlaySounds) PlaySound(MySound);
return(0);
}
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2011-02-00 ***
*/
int BUY(string symbol_b, double lotsize_b, double takeprofit_b, double stoploss_b, double trailings_b, string condition_b) {
if (!Hedge) CloseAllPositions(symbol_b,OP_SELL,MagicNumberShort);
if (OrderIncludeTPSL) {
if (ExecuteOrder(OP_BUY, symbol_b, LotManagement(symbol_b,lotsize_b),
stoploss_b, takeprofit_b, commentlong, MagicNumberLong, BuyColor, condition_b)>0) {
} else {
}
} else {
if (ExecuteOrderinTwo(OP_BUY, symbol_b, LotManagement(symbol_b,lotsize_b),
stoploss_b, takeprofit_b, commentlong, MagicNumberLong, BuyColor, condition_b)>0) {
} else {
}
}
return(0);
}
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2011-02-00 ***
*/
int SELL(string symbol_s, double lotsize_s, double takeprofit_s, double stoploss_s, double trailings_s, string condition_s) {
if (!Hedge) CloseAllPositions(symbol_s,OP_BUY,MagicNumberLong);
if (OrderIncludeTPSL) {
if (ExecuteOrder(OP_SELL, symbol_s, LotManagement(symbol_s,lotsize_s),
stoploss_s, takeprofit_s, commentshort, MagicNumberShort, SellColor, condition_s)>0) {
} else {
}
} else {
if (ExecuteOrderinTwo(OP_SELL, symbol_s, LotManagement(symbol_s,lotsize_s),
stoploss_s, takeprofit_s, commentshort, MagicNumberShort, SellColor, condition_s)>0) {
} else {
}
}
return(0);
}
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2010-02-20 ***
*/
int CLOSELONG(string symbol_c) {
CloseAllPositions(symbol_c,OP_BUY,MagicNumberLong);
CloseAllPositions(symbol_c,OP_BUY,MagicNumberLong);
return(0);
}
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2010-02-20 ***
*/
int CLOSESHORT(string symbol_c) {
CloseAllPositions(symbol_c,OP_SELL,MagicNumberShort);
CloseAllPositions(symbol_c,OP_SELL,MagicNumberShort);
return(0);
}
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2010-02-20 ***
*/
bool EnoughMoney(string symbol_em, double lotsize_em) {
if( ( AccountFreeMarginCheck( symbol_em, OP_BUY, lotsize_em ) < 10 ) ||
( AccountFreeMarginCheck( symbol_em, OP_SELL, lotsize_em ) < 10 ) ||
( GetLastError() == 134 ) ) {
Print("M-NOT ENOUGH MONEY TO TRADE. Free margin is insufficient to trade a lot size of ",lotsize_em,". Current Free Margin=", AccountFreeMargin());
Alert("M-NOT ENOUGH MONEY TO TRADE. Free margin is insufficient to trade a lot size of ",lotsize_em,". Current Free Margin=", AccountFreeMargin());
return(false);
} else {
return(true);
}
}
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2010-02-20 ***
*/
int ExecuteOrderinTwo(int ordertype_bn, string symbol_bn, double lotsize_bn, double stoploss_bn, double takeprofit_bn, string comment_bn, int magic_bn, color ordercolor_bn, string condition_bn) //1 is ok, -1 is not ok
{
int errorcode_ts=0;
Print("M-Executing order in Two Steps. Step 1 - Sending order without TP/SL.");
int my_ticket = ExecuteOrder(ordertype_bn, symbol_bn, lotsize_bn, 0, 0,
comment_bn, magic_bn, ordercolor_bn, condition_bn);
if ( my_ticket > 0 && (stoploss_bn != 0 || takeprofit_bn != 0) )
{
Print("M-Executing order in Two Steps. Step 2 - Adding TP/SL.");
if (OrderSelect(my_ticket, SELECT_BY_TICKET)) {
RefreshRates();
double points_bn,digits_bn, price_bn;
bool golong_bn;
digits_bn = MarketInfo(symbol_bn, MODE_DIGITS);
points_bn = MarketInfo(symbol_bn, MODE_POINT);
stoploss_bn=stoploss_bn*PipMultiplier;
takeprofit_bn=takeprofit_bn*PipMultiplier;
if (UseRiskRatio) {
stoploss_bn = NormalizeDouble(takeprofit_bn/RiskRatio, digits_bn);
Print("M-Stop loss adjusted according to risk ratio, equation TakeProfit/StopLoss=",RiskRatio,". SL=Price +/- ", stoploss_bn*points_bn,".");
}
switch (ordertype_bn) {
case OP_BUY:
golong_bn=true;
break;
case OP_SELL:
golong_bn=false;
break;
default:
Print("M-ERROR : Wrong order type. Can not add SL/TP ", ordertype_bn);
return(-1);
break;
}
if (golong_bn) {
price_bn = NormalizeDouble(MarketInfo(symbol_bn,MODE_ASK),digits_bn);
if (stoploss_bn > 0) {
stoploss_bn = NormalizeDouble(price_bn-stoploss_bn*points_bn, digits_bn);
stoploss_bn = CheckStopLoss(symbol_bn, price_bn, stoploss_bn);
}
if (takeprofit_bn>0) {
takeprofit_bn= NormalizeDouble(price_bn+takeprofit_bn*points_bn, digits_bn);
takeprofit_bn = CheckTakeProfit(symbol_bn, price_bn, takeprofit_bn);
}
} else { // go short set up
price_bn = NormalizeDouble(MarketInfo(symbol_bn,MODE_BID),digits_bn);
if (stoploss_bn > 0) {
stoploss_bn = NormalizeDouble(price_bn+stoploss_bn*points_bn, digits_bn);
stoploss_bn = CheckStopLoss(symbol_bn, price_bn, stoploss_bn);
}
if (takeprofit_bn>0) {
takeprofit_bn= NormalizeDouble(price_bn-takeprofit_bn*points_bn, digits_bn);
takeprofit_bn = CheckTakeProfit(symbol_bn, price_bn, takeprofit_bn);
}
}//closes if go long
if (OrderModify(my_ticket,OrderOpenPrice(),stoploss_bn,takeprofit_bn,0,ordercolor_bn))
{
Print("M-Step 2 - TP/SL added. SL=",stoploss_bn," TP=",takeprofit_bn);
}else {
errorcode_ts=GetLastError();
Print("M-Step 2 failed. Could not add SL/TP to order. Error:",errorcode_ts," ",ErrorDescription(errorcode_ts));
}
} else {//closes if order select
errorcode_ts=GetLastError();
Print("M-Step 2 failed. Could not select order. Error:",errorcode_ts," ",ErrorDescription(errorcode_ts));
}
}//closes if my_ticket >0
}
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2010-02-20 ***
*/
int ExecuteOrder(int ordertype_bn, string symbol_bn, double lotsize_bn, double stoploss_bn, double takeprofit_bn, string comment_bn, int magic_bn, color ordercolor_bn, string condition_bn) //Returns ticket, -1 is not ok
{ int digits_bn;
double points_bn;
double price_bn;
double fillprice_bn;
int ticket_bn;
bool golong_bn;
int errorcode_bn;
int retrynumber_bn=1;
stoploss_bn=stoploss_bn*PipMultiplier;
takeprofit_bn=takeprofit_bn*PipMultiplier;
switch (ordertype_bn) {
case OP_BUY:
golong_bn=true;
break;
case OP_SELL:
golong_bn=false;
break;
default:
Print("M-ERROR : Wrong order type ", ordertype_bn);
return(-1);
break;
}
if (CalculateOpenPositions(symbol_bn,ordertype_bn,magic_bn)>=MaxNumberofPositions) {
Print("M-Warning : Can not execute new ",OrderTypetoString(ordertype_bn)," order for Symbol ",symbol_bn,". Maximum number of ",MaxNumberofPositions," open positions reached.");
return(0);
}
if (!EnoughMoney(symbol_bn, lotsize_bn)) {
return(-1); }
digits_bn = MarketInfo(symbol_bn, MODE_DIGITS);
points_bn = MarketInfo(symbol_bn, MODE_POINT);
if (UseRiskRatio) {
stoploss_bn = NormalizeDouble(takeprofit_bn/RiskRatio, digits_bn);
Print("M-Stop loss adjusted according to risk ratio, equation TakeProfit/StopLoss=",RiskRatio,". SL=Price +/- ", stoploss_bn*points_bn,".");
}
int tmpdecimal=1;
if (IsMicroAccount) {
tmpdecimal=2;
}
double old_lot=lotsize_bn;
if ((NormalizeDouble(AccountFreeMargin()*(MaximumPercentageatRisk/100)/1000.0,tmpdecimal)<lotsize_bn) && UseMaximumPercentageatRisk ) {
lotsize_bn = NormalizeDouble(AccountFreeMargin()*(MaximumPercentageatRisk/100)/1000.0,tmpdecimal);
if (lotsize_bn<MarketInfo(symbol_bn, MODE_MINLOT)) {
lotsize_bn=MarketInfo(symbol_bn, MODE_MINLOT);
Print("M-Lot adjusted from ",old_lot," to minimum size allowed by the server of ",lotsize_bn," but it DOES NOT comply with Maximum Risk condition. User interaction is required!");
} else {
Print("M-Lot adjusted from ",old_lot," to ",lotsize_bn," to comply with Maximum Risk condition. Each trade can risk only ",MaximumPercentageatRisk,"% of free margin.");
}
}
while(retrynumber_bn>0)
{
RefreshRates();
if (golong_bn) {
price_bn = NormalizeDouble(MarketInfo(symbol_bn,MODE_ASK),digits_bn);
if (stoploss_bn > 0) {
stoploss_bn = NormalizeDouble(price_bn-stoploss_bn*points_bn, digits_bn);
stoploss_bn = CheckStopLoss(symbol_bn, price_bn, stoploss_bn);
}
if (takeprofit_bn > 0) {
takeprofit_bn= NormalizeDouble(price_bn+takeprofit_bn*points_bn, digits_bn);
takeprofit_bn = CheckTakeProfit(symbol_bn, price_bn, takeprofit_bn);
}
Print("M-Preparing Buy order ",symbol_bn, " triggered by ",condition_bn);
} else { // go short set up
price_bn = NormalizeDouble(MarketInfo(symbol_bn,MODE_BID),digits_bn);
if (stoploss_bn > 0) {
stoploss_bn = NormalizeDouble(price_bn+stoploss_bn*points_bn, digits_bn);
stoploss_bn = CheckStopLoss(symbol_bn, price_bn, stoploss_bn);
}
if (takeprofit_bn>0) {
takeprofit_bn= NormalizeDouble(price_bn-takeprofit_bn*points_bn, digits_bn);
takeprofit_bn = CheckTakeProfit(symbol_bn, price_bn, takeprofit_bn);
}
Print("M-Preparing Sell order ",symbol_bn, " triggered by ",condition_bn);
}
if (!isTradingPossible()) {
Print("M-Warning: Trading may not be possible. Trying to open a new position.");
}
ticket_bn=OrderSend(symbol_bn,ordertype_bn,lotsize_bn,price_bn,Slippage,stoploss_bn,takeprofit_bn,comment_bn,magic_bn,0,ordercolor_bn);
if(ticket_bn>=0)
{
Sleep(SleepTime);
if(OrderSelect(ticket_bn,SELECT_BY_TICKET))
{
Print("M-Order Executed Successfully! Order Type=", OrderTypetoString(ordertype_bn), ". Symbol=", symbol_bn);
if (SendMailMode) {
subject = "EA: ";
subject = StringConcatenate(subject,EAName,". ",symbol_bn," ",OrderTypetoString(ordertype_bn)," order executed. Ticket:",ticket_bn);
mailstring = "email generated by Molanis Strategy Builder v3.1 \n";
mailstring = StringConcatenate(mailstring, "Server Time=",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),". Terminal Time=",TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS),"\n");
mailstring = StringConcatenate(mailstring, "M-Order Executed Successfully!\nOrder Info : \n Order Type=", OrderTypetoString(ordertype_bn), ".\n Symbol=", symbol_bn, ".\n Lot Size=",lotsize_bn,
".\n Price=",price_bn, ".\n FillPrice=",OrderOpenPrice(), ".\n Slippage=",(OrderOpenPrice()-price_bn), ".\n SL=",OrderStopLoss(),".\n TP=",OrderTakeProfit(), ".\n Order time=",TimeToStr(OrderOpenTime()),"\n Ticket:",ticket_bn,
".\n Maximum Number of open positions:",MaxNumberofPositions,".\n Number of open positions:",CalculateOpenPositions(symbol_bn,ordertype_bn,magic_bn));
SendMail(subject, mailstring);
}
if (PlaySounds) PlaySound(MySound);
return(ticket_bn);
}
} else {
errorcode_bn = GetLastError();
if(errorcode_bn==ERR_SERVER_BUSY || errorcode_bn==ERR_TRADE_CONTEXT_BUSY || errorcode_bn==ERR_BROKER_BUSY || errorcode_bn==ERR_NO_CONNECTION
|| errorcode_bn==ERR_TRADE_TIMEOUT || errorcode_bn==ERR_INVALID_PRICE || errorcode_bn==ERR_OFF_QUOTES || errorcode_bn==ERR_PRICE_CHANGED || errorcode_bn==ERR_REQUOTE) {
Print("M-ERROR: Server error. Sending order to server again. Retry intent number = ",retrynumber_bn);
retrynumber_bn++;
if (retrynumber_bn>MaxOrderRetry+1) {
Print("M-ERROR: Could not open new position. Error=",errorcode_bn, " ",ErrorDescription(errorcode_bn),". Order Info : Order Type=", OrderTypetoString(ordertype_bn), ". Symbol=", symbol_bn, ". Lot Size=",lotsize_bn,
". Price=",price_bn, ". SL=",stoploss_bn,". TP=",takeprofit_bn);
Alert("M-ERROR: Could not open new position. Error=",errorcode_bn, " ",ErrorDescription(errorcode_bn),". Order Info : Order Type=", OrderTypetoString(ordertype_bn), ". Symbol=", symbol_bn, ". Lot Size=",lotsize_bn,
". Price=",price_bn, ". SL=",stoploss_bn,". TP=",takeprofit_bn);
if (SendMailMode) {
subject = "EA: ";
subject = StringConcatenate(subject,EAName," ",symbol_bn," ",OrderTypetoString(ordertype_bn)," order FAILED");
mailstring = "email generated by Molanis Strategy Builder v3.1 \n";
mailstring = StringConcatenate(mailstring, "Server Time=",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),". Terminal Time=",TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS),"\n");
mailstring = StringConcatenate(mailstring, "WARNING: Could not open new position.\n Error=",errorcode_bn, "\n",ErrorDescription(errorcode_bn),".\n Order Info :\nOrder Type=", OrderTypetoString(ordertype_bn), ".\n Symbol=", symbol_bn, ".\n Lot Size=",lotsize_bn,
".\n Price=",price_bn, ".\n SL=",stoploss_bn,".\n TP=",takeprofit_bn);
SendMail(subject, mailstring);
}
return (-1);
}
Sleep(SleepTime);
} else {
Print("M-ERROR: Could not open new position. Error=",errorcode_bn, " ",ErrorDescription(errorcode_bn),". Order Info : Order Type=", OrderTypetoString(ordertype_bn) , ". Symbol=", symbol_bn, ". Lot Size=",lotsize_bn,
". Price=",price_bn, ". SL=",stoploss_bn,". TP=",takeprofit_bn);
Alert("M-ERROR: Could not open new position. Error=",errorcode_bn, " ",ErrorDescription(errorcode_bn),". Order Info : Order Type=", OrderTypetoString(ordertype_bn) , ". Symbol=", symbol_bn, ". Lot Size=",lotsize_bn,
". Price=",price_bn, ". SL=",stoploss_bn,". TP=",takeprofit_bn);
if (errorcode_bn==ERR_INVALID_STOPS) {
}
if (SendMailMode) {
subject = "EA: ";
subject = StringConcatenate(subject,EAName," ",symbol_bn," ",OrderTypetoString(ordertype_bn)," order FAILED");
mailstring = "email generated by Molanis Strategy Builder v3.1 \n";
mailstring = StringConcatenate(mailstring, "Server Time=",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),". Terminal Time=",TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS),"\n");
mailstring = StringConcatenate(mailstring, "WARNING: Could not open new position.\n Error=",errorcode_bn, "\n",ErrorDescription(errorcode_bn),".\n Order Info :\nOrder Type=", OrderTypetoString(ordertype_bn), ".\n Symbol=", symbol_bn, ".\n Lot Size=",lotsize_bn,
".\n Price=",price_bn, ".\n SL=",stoploss_bn,".\n TP=",takeprofit_bn);
SendMail(subject, mailstring);
}
return (-1);
}
}
} //close while
}
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2010-02-20 ***
*/
double LotManagement(string symbol_lot,double lot_lot)
{
double lot= lot_lot; // get defined lotsize
int orders=OrdersHistoryTotal(); // history orders total
int losses=0,gains=0; // number of losses/gain orders without a break
bool magiccond=true;
bool isLastWin=true;
double MinLots = MarketInfo(Symbol(), MODE_MINLOT); //Minimum lot size
int AccDigits=1;
if (MinLots==0.1) {
AccDigits=1;
} else {
AccDigits=2;
}
if (!UseLotManagement && !UseMartingale) //if not using lot management
{
if (lot<MarketInfo(symbol_lot, MODE_MINLOT)) {
lot=MarketInfo(symbol_lot, MODE_MINLOT);
Print("M-Warning: Your lot size of ",lot_lot," is lower than the minimum size allowed by the server. Lot size changed to ",lot);
}
if (lot>100) {
lot=100;
Print("M-Warning: Your lot size of ",lot_lot," is higher than the maximum size allowed by the server. Lot size changed to ",lot);
}
return(lot);
}
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("M-Error in history when running Lot Management! - Trying again...");
Sleep(1000);
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("M-Error in history when running Lot Management! - Using next order instead.");
continue;
}
}
magiccond=false;
if (OrderMagicNumber()==0) {
magiccond=true;
} else {
if (OrderMagicNumber() == MagicNumberLong || OrderMagicNumber() == MagicNumberShort) {
magiccond=true;
} else {
magiccond=false;
}
}
if(OrderSymbol()!=symbol_lot || OrderType()>OP_SELL || !magiccond || MartingaleTime > OrderCloseTime()) continue;
if(OrderProfit()>0) break;
if(OrderProfit()<0) {
losses++;
if (UseMartingale) Print ("M-Martingale ",symbol_lot," Order Index=",i," Ticket=",OrderTicket(), " Loss Number=",losses,", LotSize=",OrderLots(), " Profit=",OrderProfit());
}
}
for(i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("M-Error in history when running Lot Management!");
Sleep(1000);
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("M-Error in history when running Lot Management! - Using next order instead.");
continue;
}
}
magiccond=false;
if (OrderMagicNumber()==0) {
magiccond=true;
} else {
if (OrderMagicNumber() == MagicNumberLong || OrderMagicNumber() == MagicNumberShort) {
magiccond=true;
} else {
magiccond=false;
}
}
if(OrderSymbol()!=symbol_lot || OrderType()>OP_SELL || !magiccond || MartingaleTime > OrderCloseTime()) continue;
if(OrderProfit()<0) break;
if(OrderProfit()>0) {
gains++;
if (UseMartingale) Print ("M-Martingale ",symbol_lot," Order Index=",i," Ticket=",OrderTicket(), " Win Number=",gains,", LotSize=",OrderLots(), " Profit=",OrderProfit());
}
}
if (UseMartingale) {
for(int y=orders-1;y>=0;y--)
{
if(OrderSelect(y,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("M-Error in history when running martingale! - Trying again...");
Sleep(1000);
if(OrderSelect(y,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("M-Error in history when running martingale! - Using next order instead.");
continue;
}
}
magiccond=false;
if (OrderMagicNumber()==0) {
magiccond=true;
} else {
if (OrderMagicNumber() == MagicNumberLong || OrderMagicNumber() == MagicNumberShort) {
magiccond=true;
} else {
magiccond=false;
}
}
if(OrderSymbol()!=symbol_lot || OrderType()>OP_SELL || !magiccond || MartingaleTime > OrderCloseTime()) continue;
if(OrderProfit()>0) {
isLastWin=true;
Print ("M-Martingale ",symbol_lot," Last Order is a WIN. Index=",y," Ticket=",OrderTicket(), " LotSize=",OrderLots(), " Profit=",OrderProfit());
break;
} else {
isLastWin=false;
Print ("M-Martingale ",symbol_lot," Last Order is a LOSS. Index=",y," Ticket=",OrderTicket(), " LotSize=",OrderLots(), " Profit=",OrderProfit());
break;
}
}
if (afterLoss && losses>0 ) {
if (!isLastWin) {
lot=NormalizeDouble(OrderLots()*MartingaleMultiplier,AccDigits);
Показано первые 50% кода (символов: 54797)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.