← К каталогу
Исходный код · ID 693

triodancer_4.4.5.mq4

Похожие материалы по тегам

ea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих теговindicator marketmind for tradingview.pineTradingView · 2 общих теговea_price_action_v6_grid.mq4MQL4 / MetaTrader 4 · 2 общих теговindo run 1.5.mq4MQL4 / MetaTrader 4 · 2 общих теговclevrfx v3.0@lifeindreamsworld.mq4MQL4 / MetaTrader 4 · 2 общих теговtriodancer_4.4.6.mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Triodancer 4.4.5 — торговый советник для MetaTrader 4, работающий по трём независимым логическим блокам, названным Jaipong, Keroncong и Tortor. Каждый блок имеет собственный магический номер, ограничение на число одновременно открытых ордеров и отдельные настройки сопровождения позиций. Советник обрабатывает тиковые события, анализирует данные текущего символа и управляет ордерами через торговые функции MetaTrader 4. В тестовом режиме допускается не более одной обработки в минуту, а при работе на реальном счёте выполняется дополнительная проверка условий по времени и новостям.

Для каждого блока предусмотрены сеточные доливки: объём и шаг между уровнями рассчитываются по заданным пользователем коэффициентам и базовым уровням. Предусмотрены отдельные параметры трейлинг-стопа для каждого блока, а также общий ограничитель максимального объёма позиции. Дополнительно реализованы функции закрытия всех ордеров блока, расчёта средней цены и выставления общего тейк-профита по совокупной позиции.

Советник учитывает торговое расписание: может запрещать открытие новых позиций в конце недели и в начале недели, а также при наличии новостного индикатора urdala_news_investing.com. При включённой опции автоматического подбора параметров сетки значения шага и тейк-профита пересчитываются по среднему дневному диапазону за последние дни; если данных недостаточно, работа советника на графике прекращается.

Все входные параметры задаются пользователем; значения по умолчанию и группы настроек приведены в исходном коде. Советник не является индикатором или библиотекой и предназначен для автоматической торговли на одном символе.

Настройки программы

НастройкаОписание
Jaipong Блок Jaipong — Включает или отключает первый логический блок советника.
Keroncong Блок Keroncong — Включает или отключает второй логический блок советника.
Tortor Блок Tortor — Включает или отключает третий логический блок советника.
MA_Keroncong Скользящая средняя Keroncong — Включает или отключает использование скользящей средней в блоке Keroncong.
Period_MA Период скользящей средней — Таймфрейм, используемый для расчёта скользящей средней.
MaxTrades_Jaipong Максимум ордеров Jaipong — Максимальное число одновременно открытых ордеров в блоке Jaipong.
MaxTrades_Keroncong Максимум ордеров Keroncong — Максимальное число одновременно открытых ордеров в блоке Keroncong.
MaxTrades_Tortor Максимум ордеров Tortor — Максимальное число одновременно открытых ордеров в блоке Tortor.
MagicNumber_Jaipong Магический номер Jaipong — Идентификатор ордеров, принадлежащих блоку Jaipong.
MagicNumber_Keroncong Магический номер Keroncong — Идентификатор ордеров, принадлежащих блоку Keroncong.
MagicNumber_Tortor Магический номер Tortor — Идентификатор ордеров, принадлежащих блоку Tortor.
MaxLots Максимальный объём — Ограничение максимального объёма позиции.
t2 Настройки времени — Заголовок группы настроек времени.
CloseFriday Закрытие в пятницу — Разрешает или запрещает блокировку новых сделок в пятницу после заданного часа.
CloseFridayHour Час закрытия в пятницу — Час, начиная с которого в пятницу новые сделки не открываются.
OpenMondey Открытие в понедельник — Разрешает или запрещает блокировку новых сделок в начале недели до заданного часа.
OpenMondeyHour Час открытия в понедельник — Час, до которого в начале недели новые сделки не открываются.
____Urdala_News_Investing_____ Настройки новостей — Заголовок группы настроек новостного фильтра.
AvoidNews Учитывать новости — Включает или отключает учёт новостного фильтра при принятии решения об открытии новых позиций.
t3 Настройки Jaipong — Заголовок группы настроек блока Jaipong.
UseTrailingStop_Jaipong Использовать трейлинг Jaipong — Включает или отключает трейлинг-стоп в блоке Jaipong.
TrailingStart_Jaipong Старт трейлинга Jaipong — Уровень прибыли в пунктах, при достижении которого начинается трейлинг-стоп в блоке Jaipong.
TrailingStop_Jaipong Трейлинг-стоп Jaipong — Величина трейлинг-стопа в пунктах для блока Jaipong.
Step_Jaipong Шаг сетки Jaipong — Базовый шаг между уровнями сетки в блоке Jaipong.
Slippage_Jaipong Проскальзывание Jaipong — Допустимое проскальзывание цены при открытии ордеров блока Jaipong.
t4 Настройки Keroncong — Заголовок группы настроек блока Keroncong.
UseTrailingStop_Keroncong Использовать трейлинг Keroncong — Включает или отключает трейлинг-стоп в блоке Keroncong.
TrailingStart_Keroncong Старт трейлинга Keroncong — Уровень прибыли в пунктах, при достижении которого начинается трейлинг-стоп в блоке Keroncong.
TrailingStop_Keroncong Трейлинг-стоп Keroncong — Величина трейлинг-стопа в пунктах для блока Keroncong.
Step_Keroncong Шаг сетки Keroncong — Базовый шаг между уровнями сетки в блоке Keroncong.
Slippage_Keroncong Проскальзывание Keroncong — Допустимое проскальзывание цены при открытии ордеров блока Keroncong.
t5 Настройки Tortor — Заголовок группы настроек блока Tortor.
UseTrailingStop_Tortor Использовать трейлинг Tortor — Включает или отключает трейлинг-стоп в блоке Tortor.
TrailingStart_Tortor Старт трейлинга Tortor — Уровень прибыли в пунктах, при достижении которого начинается трейлинг-стоп в блоке Tortor.
TrailingStop_Tortor Трейлинг-стоп Tortor — Величина трейлинг-стопа в пунктах для блока Tortor.
Step_Tortor Шаг сетки Tortor — Базовый шаг между уровнями сетки в блоке Tortor.
Slippage_Tortor Проскальзывание Tortor — Допустимое проскальзывание цены при открытии ордеров блока Tortor.
T6 Настройки объёма — Заголовок группы настроек объёма.
Lots Объём — Базовый объём для открытия первой позиции.
BaseLotLevel Базовый уровень объёма — Базовый уровень сетки, до которого объём доливок остаётся неизменным.
LotExponent Коэффициент объёма — Коэффициент, применяемый к объёму доливок после базового уровня.
T7 Настройки тейк-профита — Заголовок группы настроек тейк-профита.
TakeProfit Тейк-профит — Целевой уровень прибыли в пунктах для совокупной позиции.
T8 Дополнительные настройки расстояния — Заголовок группы дополнительных настроек расстояния.
DistanceExponent Коэффициент расстояния — Коэффициент, применяемый к шагу между уровнями сетки после базового уровня.
BaseDistanceLevel Базовый уровень расстояния — Базовый уровень сетки, до которого шаг между ордерами остаётся неизменным.
Получить полный код

Поиск по коду файла

extern bool Jaipong = TRUE;
extern bool Keroncong = TRUE;
extern bool Tortor = TRUE;
 bool OrdersSideOptimize = TRUE;
 int MinGridLevelForEnable_Strategy_3 = 9999;

extern bool  MA_Keroncong = FALSE;
extern int Period_MA = PERIOD_H1;
 int Delay_Jaipong = PERIOD_M1;
 int Delay_Keroncong = PERIOD_M1;
 int Delay_Tortor = PERIOD_M1;

 bool StopTradeAfterTP_Jaipong = FALSE;
 bool StopTradeAfterTP_Keroncong = FALSE;
 bool StopTradeAfterTP_Tortor = FALSE;

int Period = 60;

 double LossLimit_Jaipong = -1000000.0;
 double LossLimit_Keroncong = -1000000.0;
 double LossLimit_Tortor = -1000000.0;

extern int MaxTrades_Jaipong = 12;
extern int MaxTrades_Keroncong = 12;
extern int MaxTrades_Tortor = 12;

 bool Auto_MagicNumber = FALSE;
extern int MagicNumber_Jaipong = 11111;
extern int MagicNumber_Keroncong = 22222;
extern int MagicNumber_Tortor = 33333;

double Jai_lot, Jai;
double Ker_lot, Ker;
double Tor_lot, Tor; 

double max_loss_J=0;
double max_loss_K=0;
double max_loss_T=0;

int J, K, T;

string a, b, c;
string posJ, posK, posT;

int J_r = 0; 
int K_r = 0;
int T_r = 0;

double Jai_r=0;
double Ker_r=0;
double Tor_r=0;

int Gi_108 = 2;
extern double MaxLots = 5.0;
 bool MM = FALSE;
 bool UseEquityStop = FALSE;
 double TotalEquityRisk = 20.0;
extern string t2 = "Time Setting";
extern bool CloseFriday = TRUE;
extern int CloseFridayHour = 17;
extern bool OpenMondey = TRUE;
extern int OpenMondeyHour = 3;
 bool       UseTimer =            FALSE;
 int        StartHour =          1;
 int        StopHour =           6;
extern string ____Urdala_News_Investing_____ = "----------Urdala_News_Investing----------";
extern bool AvoidNews = true;
 int UTimeDo =61;
 int UTimePosle = 61;
 int Uoffset = 3;
 bool Vhigh = true;
 bool Vmedium = false;
 bool Vlow = false;
extern string t3 = "Setting for Dancing Jaipong";
bool Gi_220 = FALSE;
double Gd_224 = 48.0;
extern bool UseTrailingStop_Jaipong = FALSE;
double G_pips_236 = 500.0;
extern double TrailingStart_Jaipong = 10.0;
extern double TrailingStop_Jaipong = 5.0;
extern double Step_Jaipong = 30.0;
extern double Slippage_Jaipong = 3.0;
double G_price_280;
double Gd_288;
double Gd_unused_296;
double Gd_unused_304;
double G_price_312;
double G_bid_320;
double G_ask_328;
double Gd_336;
double Gd_344;
bool Gi_360;
string Gs_364 = "Dancing Jaipong";
int Gi_372 = 0;
int Gi_376;
int Gi_380 = 0;
double Lot_Jaipong;
int G_pos_392 = 0;
int OrdersCount1;
double Gd_400 = 0.0;
bool Gi_408 = FALSE;
bool Gi_412 = FALSE;
bool Gi_416 = FALSE;
int Gi_420;
bool Gi_424 = FALSE;
double Gd_428;
double Gd_436;
extern string t4 = "Setting for Dancing Keroncong";
extern bool UseTrailingStop_Keroncong = FALSE;
double G_pips_508 = 500.0;
extern double TrailingStart_Keroncong = 10.0;
extern double TrailingStop_Keroncong = 5.0;
extern double Step_Keroncong = 30.0;
bool Gi_532 = FALSE;
double Gd_536 = 48.0;
extern double Slippage_Keroncong = 3.0;
double G_price_564;
double Gd_572;
double G_price_596;
double G_bid_604;
double G_ask_612;
double Gd_620;
double Gd_628;
double Gd_636;
bool Gi_644;
string Gs_648 = "Dancing Keroncong";
int Gi_656 = 0;
int Gi_660;
int Gi_664 = 0;
double Lot_Keroncong;
int G_pos_676 = 0;
int OrdersCount2;
double Gd_684 = 0.0;
bool Gi_692 = FALSE;
bool Gi_696 = FALSE;
bool Gi_700 = FALSE;
int Gi_704;
bool Gi_708 = FALSE;
double Gd_712;
double Gd_720;
int G_datetime_728 = 1;
extern string t5 = "Setting for Dancing Tortor";
extern bool UseTrailingStop_Tortor = FALSE;
double G_pips_792 = 500.0;
extern double TrailingStart_Tortor = 100.0;
extern double TrailingStop_Tortor = 50.0;
bool Gi_816 = FALSE;
double Gd_820 = 48.0;
extern double Step_Tortor = 300.0;
extern double Slippage_Tortor = 3.0;
double G_price_848;
double Gd_856;
double Gd_unused_864;
double Gd_unused_872;
double G_price_880;
double G_bid_888;
double G_ask_896;
double Gd_904;
double Gd_912;
double Gd_920;
bool Gi_928;
string Gs_932 = "Dancing Tortor";
int Gi_940 = 0;
int Gi_944;
int Gi_948 = 0;
double Lot_Tortor;
int G_pos_960 = 0;
int OrdersCount3;
double Gd_968 = 0.0;
bool Gi_976 = FALSE;
bool Gi_980 = FALSE;
bool Gi_984 = FALSE;
int Gi_988;
bool Gi_992 = FALSE;
double Gd_996;
double Gd_1004;
int G_datetime_1012 = 1;
int Jaipong_Datetime = 1;
bool G_corner_1052 = TRUE;
int Gi_1056 = 0;
int Gi_1060 = 10;
int G_window_1064 = 0;
bool Gi_1068 = TRUE;
bool Gi_unused_1072 = TRUE;
bool Gi_1076 = FALSE;
int G_color_1080 = Gray;
int G_color_1084 = Gray;
int G_color_1088 = Gray;
int G_color_1092 = DarkOrange;
int Gi_unused_1096 = 36095;
int G_color_1100 = Lime;
int G_color_1104 = OrangeRed;
int Gi_1108 = 65280;
int Gi_1112 = 17919;
int G_color_1116 = Lime;
int G_color_1120 = Red;
int G_color_1124 = Orange;
int G_period_1128 = 8;
int G_period_1132 = 17;
int G_period_1136 = 9;
int G_applied_price_1140 = PRICE_CLOSE;
int G_color_1144 = Lime;
int G_color_1148 = Tomato;
int G_color_1152 = Green;
int G_color_1156 = Red;
int G_period_1176 = 9;
int G_applied_price_1180 = PRICE_CLOSE;
int G_period_1192 = 13;
int G_applied_price_1196 = PRICE_CLOSE;
int G_period_1208 = 5;
int G_period_1212 = 3;
int G_slowing_1216 = 3;
int G_ma_method_1220 = MODE_EMA;
int G_color_1232 = Lime;
int G_color_1236 = Red;
int G_color_1240 = Orange;
int G_period_1252 = 5;
int G_period_1256 = 9;
int G_ma_method_1260 = MODE_EMA;
int G_applied_price_1264 = PRICE_CLOSE;
int G_color_1276 = Lime;
int G_color_1280 = Red;
string Gs_dummy_1292;
string G_text_1464;
string G_text_1472;
bool Gi_1480 = FALSE;//TRUE;
int Gi_1492;
int G_str2int_1496;
int G_str2int_1500;
int G_str2int_1504;
extern string T6 = "Lots settings";
extern double Lots = 0.01;
extern int BaseLotLevel = 3;
extern double LotExponent = 1.5;
extern string T7 = "Take profit settings";
 bool AutoGridStepAndProfit = false;
extern double TakeProfit = 50.0;
extern string T8 = "Additional distance settings";
extern double DistanceExponent = 1.1;
extern int BaseDistanceLevel = 3;
double PreviousMinute = -1.0;
int PreviousHour = -1;

int init()                                      
{
      // код доступен только после оплаты
   } 

int start() {
      // код доступен только после оплаты
   }

int f0_4() {                 //??????? ???????? ???. Jaipong
	int count_0 = 0;
	for (int pos_4 = OrdersTotal() - 1; pos_4 >= 0; pos_4--) {
		OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong)
		if (OrderType() == OP_SELL || OrderType() == OP_BUY) count_0++;
	}
	return (count_0);
}

void f0_24() {           //???????? ???? Jaipong

	for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) {
		OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() == Symbol()) {
			if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong) {
				if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage_Jaipong, Blue);
				if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage_Jaipong, Red);
			}
			Sleep(1000);
		}
	}
}

int f0_3(int Ai_0, double A_lots_4, double A_price_12, int A_slippage_20, double Ad_24, int Ai_32, int Ai_36, string A_comment_40, int A_magic_48, int A_datetime_52, color A_color_56) {
	int ticket_60 = 0;
	int error_64 = 0;
	int count_68 = 0;
	int Li_72 = 100;
	switch (Ai_0) {
		case 2:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_22(Ad_24, Ai_32), f0_19(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(1000);
		}
		break;
		case 4:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, A_lots_4, A_price_12, A_slippage_20, f0_22(Ad_24, Ai_32), f0_19(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 0:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			RefreshRates();
			ticket_60 = OrderSend(Symbol(), OP_BUY, A_lots_4, Ask, A_slippage_20, f0_22(Bid, Ai_32), f0_19(Ask, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
			PlaySound("jaipong.wav");
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 3:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_11(Ad_24, Ai_32), f0_1(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 5:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, A_lots_4, A_price_12, A_slippage_20, f0_11(Ad_24, Ai_32), f0_1(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 1:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_SELL, A_lots_4, Bid, A_slippage_20, f0_11(Ask, Ai_32), f0_1(Bid, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
			PlaySound("jaipong.wav");
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
	}
	return (ticket_60);
}

double f0_22(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 - Ai_8 * Point);
}

double f0_11(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 + Ai_8 * Point);
}

double f0_19(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 + Ai_8 * Point);
}

double f0_1(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 - Ai_8 * Point);
}

double f0_31() {
	double Ld_ret_0 = 0;
	for (G_pos_392 = OrdersTotal() - 1; G_pos_392 >= 0; G_pos_392--) {
		OrderSelect(G_pos_392, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong)
		if (OrderType() == OP_BUY || OrderType() == OP_SELL) Ld_ret_0 += OrderProfit();
	}
	return (Ld_ret_0);
}

void f0_35(int Ai_0, int Ai_4, double A_price_8) {
	int Li_16;
	double order_stoploss_20;
	double price_28;
	if (Ai_4 != 0) {
		for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) {
			if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) {
				if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
				if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber_Jaipong) {
					if (OrderType() == OP_BUY) {
						Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0);
						if (Li_16 < Ai_0) continue;
						order_stoploss_20 = OrderStopLoss();
						price_28 = Bid - Ai_4 * Point;
						if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua);
					}
					if (OrderType() == OP_SELL) {
						Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0);
						if (Li_16 < Ai_0) continue;
						order_stoploss_20 = OrderStopLoss();
						price_28 = Ask + Ai_4 * Point;
						if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red);
					}
				}
				Sleep(1000);
			}
		}
	}
}

double f0_7() {
	if (f0_4() == 0) Gd_428 = AccountEquity();
	if (Gd_428 < Gd_436) Gd_428 = Gd_436;
	else Gd_428 = AccountEquity();
	Gd_436 = AccountEquity();
	return (Gd_428);
}

double f0_32() {
	double order_open_price_0;
	int ticket_8;
	double Ld_unused_12 = 0;
	int ticket_20 = 0;
	for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
		OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong && OrderType() == OP_BUY) {
			ticket_8 = OrderTicket();
			if (ticket_8 > ticket_20) {
				order_open_price_0 = OrderOpenPrice();
				Ld_unused_12 = order_open_price_0;
				ticket_20 = ticket_8;
			}
		}
	}
	return (order_open_price_0);
}

double f0_20() {
	double order_open_price_0;
	int ticket_8;
	double Ld_unused_12 = 0;
	int ticket_20 = 0;
	for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
		OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong && OrderType() == OP_SELL) {
			ticket_8 = OrderTicket();
			if (ticket_8 > ticket_20) {
				order_open_price_0 = OrderOpenPrice();
				Ld_unused_12 = order_open_price_0;
				ticket_20 = ticket_8;
			}
		}
	}
	return (order_open_price_0);
}

int f0_5() {
	int count_0 = 0;
	for (int pos_4 = OrdersTotal() - 1; pos_4 >= 0; pos_4--) {
		OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong)
		if (OrderType() == OP_SELL || OrderType() == OP_BUY) count_0++;
	}
	return (count_0);
}

void f0_18() {
	for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) {
		OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() == Symbol()) {
			if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong) {
				if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage_Keroncong, Blue);
				if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage_Keroncong, Red);
			}
			Sleep(1000);
		}
	}
}

int f0_2(int Ai_0, double A_lots_4, double A_price_12, int A_slippage_20, double Ad_24, int Ai_32, int Ai_36, string A_comment_40, int A_magic_48, int A_datetime_52, color A_color_56) {
	int ticket_60 = 0;
	int error_64 = 0;
	int count_68 = 0;
	int Li_72 = 100;
	switch (Ai_0) {
		case 2:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_13(Ad_24, Ai_32), f0_25(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(1000);
		}
		break;
		case 4:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, A_lots_4, A_price_12, A_slippage_20, f0_13(Ad_24, Ai_32), f0_25(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 0:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			RefreshRates();
			ticket_60 = OrderSend(Symbol(), OP_BUY, A_lots_4, Ask, A_slippage_20, f0_13(Bid, Ai_32), f0_25(Ask, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
			PlaySound("keroncong.wav");
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 3:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_33(Ad_24, Ai_32), f0_26(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 5:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, A_lots_4, A_price_12, A_slippage_20, f0_33(Ad_24, Ai_32), f0_26(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 1:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_SELL, A_lots_4, Bid, A_slippage_20, f0_33(Ask, Ai_32), f0_26(Bid, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
			PlaySound("keroncong.wav");
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
	}
	return (ticket_60);
}

double f0_13(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 - Ai_8 * Point);
}

double f0_33(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 + Ai_8 * Point);
}

double f0_25(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 + Ai_8 * Point);
}

double f0_26(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 - Ai_8 * Point);
}

double f0_29() {
	double Ld_ret_0 = 0;
	for (G_pos_676 = OrdersTotal() - 1; G_pos_676 >= 0; G_pos_676--) {
		OrderSelect(G_pos_676, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong)
		if (OrderType() == OP_BUY || OrderType() == OP_SELL) Ld_ret_0 += OrderProfit();
	}
	return (Ld_ret_0);
}

void f0_21(int Ai_0, int Ai_4, double A_price_8) {
	int Li_16;
	double order_stoploss_20;
	double price_28;
	if (Ai_4 != 0) {
		for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) {
			if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) {
				if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
				if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber_Keroncong) {
					if (OrderType() == OP_BUY) {
						Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0);
						if (Li_16 < Ai_0) continue;
						order_stoploss_20 = OrderStopLoss();
						price_28 = Bid - Ai_4 * Point;
						if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua);
					}
					if (OrderType() == OP_SELL) {
						Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0);
						if (Li_16 < Ai_0) continue;
						order_stoploss_20 = OrderStopLoss();
						price_28 = Ask + Ai_4 * Point;
						if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red);
					}
				}
				Sleep(1000);
			}
		}
	}
}

double f0_16() {
	if (f0_5() == 0) Gd_712 = AccountEquity();
	if (Gd_712 < Gd_720) Gd_712 = Gd_720;
	else Gd_712 = AccountEquity();
	Gd_720 = AccountEquity();
	return (Gd_712);
}

double f0_36() {
	double order_open_price_0;
	int ticket_8;
	double Ld_unused_12 = 0;
	int ticket_20 = 0;
	for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
		OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong && OrderType() == OP_BUY) {
			ticket_8 = OrderTicket();
			if (ticket_8 > ticket_20) {
				order_open_price_0 = OrderOpenPrice();
				Ld_unused_12 = order_open_price_0;
				ticket_20 = ticket_8;
			}
		}
	}
	return (order_open_price_0);
}

double f0_28() {
	double order_open_price_0;
	int ticket_8;
	double Ld_unused_12 = 0;
	int ticket_20 = 0;
	for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
		OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong && OrderType() == OP_SELL) {
			ticket_8 = OrderTicket();
			if (ticket_8 > ticket_20) {
				order_open_price_0 = OrderOpenPrice();
				Ld_unused_12 = order_open_price_0;
				ticket_20 = ticket_8;
			}
		}
	}
	return (order_open_price_0);
}

int f0_12() {
	int count_0 = 0;
	for (int pos_4 = OrdersTotal() - 1; pos_4 >= 0; pos_4--) {
		OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor)
		if (OrderType() == OP_SELL || OrderType() == OP_BUY) count_0++;
	}
	return (count_0);
}

void f0_0() {
	for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) {
		OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() == Symbol()) {
			if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor) {
				if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage_Tortor, Blue);
				if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage_Tortor, Red);
			}
			Sleep(1000);
		}
	}
}

int f0_6(int Ai_0, double A_lots_4, double A_price_12, int A_slippage_20, double Ad_24, int Ai_32, int Ai_36, string A_comment_40, int A_magic_48, int A_datetime_52, color A_color_56) {
	int ticket_60 = 0;
	int error_64 = 0;
	int count_68 = 0;
	int Li_72 = 100;
	switch (Ai_0) {
		case 2:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_14(Ad_24, Ai_32), f0_9(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(1000);
		}
		break;
		case 4:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, A_lots_4, A_price_12, A_slippage_20, f0_14(Ad_24, Ai_32), f0_9(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 0:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			RefreshRates();
			ticket_60 = OrderSend(Symbol(), OP_BUY, A_lots_4, Ask, A_slippage_20, f0_14(Bid, Ai_32), f0_9(Ask, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
			PlaySound("tortor.wav");
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 3:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_23(Ad_24, Ai_32), f0_10(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 5:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, A_lots_4, A_price_12, A_slippage_20, f0_23(Ad_24, Ai_32), f0_10(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
			A_color_56);
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
		break;
		case 1:
		for (count_68 = 0; count_68 < Li_72; count_68++) {
			ticket_60 = OrderSend(Symbol(), OP_SELL, A_lots_4, Bid, A_slippage_20, f0_23(Ask, Ai_32), f0_10(Bid, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
			PlaySound("tortor.wav");
			error_64 = GetLastError();
			if (error_64 == 0/* NO_ERROR */) break;
			if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
			Sleep(5000);
		}
	}
	return (ticket_60);
}

double f0_14(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 - Ai_8 * Point);
}

double f0_23(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 + Ai_8 * Point);
}

double f0_9(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 + Ai_8 * Point);
}

double f0_10(double Ad_0, int Ai_8) {
	if (Ai_8 == 0) return (0);
	return (Ad_0 - Ai_8 * Point);
}

double f0_8() {
	double Ld_ret_0 = 0;
	for (G_pos_960 = OrdersTotal() - 1; G_pos_960 >= 0; G_pos_960--) {
		OrderSelect(G_pos_960, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor)
		if (OrderType() == OP_BUY || OrderType() == OP_SELL) Ld_ret_0 += OrderProfit();
	}
	return (Ld_ret_0);
}

void f0_34(int Ai_0, int Ai_4, double A_price_8) {
	int Li_16;
	double order_stoploss_20;
	double price_28;
	if (Ai_4 != 0) {
		for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) {
			if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) {
				if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
				if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber_Tortor) {
					if (OrderType() == OP_BUY) {
						Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0);
						if (Li_16 < Ai_0) continue;
						order_stoploss_20 = OrderStopLoss();
						price_28 = Bid - Ai_4 * Point;
						if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua);
					}
					if (OrderType() == OP_SELL) {
						Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0);
						if (Li_16 < Ai_0) continue;
						order_stoploss_20 = OrderStopLoss();
						price_28 = Ask + Ai_4 * Point;
						if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red);
					}
				}
				Sleep(1000);
			}
		}
	}
}

double f0_30() {
	if (f0_12() == 0) Gd_996 = AccountEquity();
	if (Gd_996 < Gd_1004) Gd_996 = Gd_1004;
	else Gd_996 = AccountEquity();
	Gd_1004 = AccountEquity();
	return (Gd_996);
}

double f0_17() {
	double order_open_price_0;
	int ticket_8;
	double Ld_unused_12 = 0;
	int ticket_20 = 0;
	for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
		OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor && OrderType() == OP_BUY) {
			ticket_8 = OrderTicket();
			if (ticket_8 > ticket_20) {
				order_open_price_0 = OrderOpenPrice();
				Ld_unused_12 = order_open_price_0;
				ticket_20 = ticket_8;
			}
		}
	}
	return (order_open_price_0);
}

double f0_27() {
	double order_open_price_0;
	int ticket_8;
	double Ld_unused_12 = 0;
	int ticket_20 = 0;
	for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
		OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor && OrderType() == OP_SELL) {
			ticket_8 = OrderTicket();
			if (ticket_8 > ticket_20) {
				order_open_price_0 = OrderOpenPrice();
				Ld_unused_12 = order_open_price_0;
				ticket_20 = ticket_8;
			}
		}
	}
	return (order_open_price_0);
}

double GetTakeProfit(int GridLevel)
{
	double Profit;

	switch(GridLevel)
	{
		case 0: Profit = TakeProfit; break;
		default: Profit = TakeProfit; break;
	}

	return NormalizeDouble(Profit,2); 
}

double GetLotExponent(int GridLevel)
{

	double Exponent;

	if(GridLevel < BaseLotLevel)
	{
		Exponent = 1;
	}
	else
	{
		Exponent = LotExponent;
	}

	return(Exponent);

}

bool AllowTradeTime(){
	if((UseTimer==TRUE && Hour() >= StartHour && Hour() <= StopHour) || UseTimer==FALSE)
	{
		return true;
	}
	else
	{
		return false;
	}
}

double CheckLotSize(double Lot)
{
	if(Lot > MaxLots)
	{
		Lot = MaxLots;
	}
	return Lot;
}

double GetDistance(int GridLevel, int StrategyNumber)
{

	double Distance;
	double Exponent;
	GridLevel++;

	if(GridLevel <= BaseDistanceLevel)
	{
		Exponent = 1;
	}
	else
	{
		Exponent = DistanceExponent;
	}

	switch(StrategyNumber)
	{
		case 1 : Distance = NormalizeDouble(Step_Jaipong * MathPow(Exponent, (GridLevel-BaseDistanceLevel)), 1); break;

		case 2 : Distance = NormalizeDouble(Step_Keroncong * MathPow(Exponent, (GridLevel-BaseDistanceLevel)), 1); break;

		case 3 : Distance = NormalizeDouble(Step_Tortor * MathPow(Exponent, (GridLevel-BaseDistanceLevel)), 1); break;
	}

	return(Distance);

}

bool OrdersSideOptimization(int Magic, int Side)
{

	if(!OrdersSideOptimize)
	{
		return(true);
	}

	int JaipongSide = 0;
	int KeroncongSide = 0;
	int TortorSide = 0;

	double JaipongLots = 0.0;
	double KeroncongLots = 0.0;
	double TortorLots = 0.0;

	int JaipongTotalOrders = 0;
	int KeroncongTotalOrders = 0;
	int TortorTotalOrders = 0;

	int MinOrders = MinGridLevelForEnable_Strategy_3;

	for (int i = OrdersTotal() - 1; i >= 0; i--) 
	{
		OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol() != Symbol() || (OrderMagicNumber() != MagicNumber_Jaipong && OrderMagicNumber() != MagicNumber_Keroncong && OrderMagicNumber() != MagicNumber_Tortor)) continue;

		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong && OrderType() == OP_BUY) 
		{
			JaipongLots += OrderLots();
			JaipongSide = 1;
			JaipongTotalOrders++;
		}
		else if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong && OrderType() == OP_SELL) 
		{
			JaipongLots += OrderLots();
			JaipongSide = -1;
			JaipongTotalOrders++;
		}

		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong && OrderType() == OP_BUY) 
		{
			KeroncongLots += OrderLots();
			KeroncongSide = 1;
			KeroncongTotalOrders++;
		}
		else if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong && OrderType() == OP_SELL) 
		{
			KeroncongLots += OrderLots();
			KeroncongSide = -1;
			KeroncongTotalOrders++;
		}

		if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor && OrderType() == OP_BUY) 
		{
			TortorLots += OrderLots();
			TortorSide = 1;
			TortorTotalOrders++;
		}
		else if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor && OrderType() == OP_SELL) 
		{
			TortorLots += OrderLots();
			TortorSide = -1;
			TortorTotalOrders++;
		}
	}

	/*Comment(
		"\n JaipongLots: "+JaipongLots
		+"\n JaipongSide: "+JaipongSide
		+"\n JaipongTotalOrders: "+JaipongTotalOrders
		+"\n"
		+"\n KeroncongLots: "+KeroncongLots
		+"\n KeroncongSide: "+KeroncongSide
		+"\n KeroncongTotalOrders: "+KeroncongTotalOrders
		+"\n"
		+"\n TortorLots: "+TortorLots
		+"\n TortorSide: "+TortorSide
		+"\n TortorTotalOrders: "+TortorTotalOrders
		);
	*/

	if(JaipongSide == 0 && KeroncongSide == 0 && TortorSide == 0)
	{
		return(true);
	}

	if(Magic == MagicNumber_Jaipong)
	{
		if(Side == 1)
		{
			if((TortorSide == -1 && KeroncongSide == 0) || (KeroncongSide == -1 && TortorSide == 0))
			{
				return(true);
			}
			else if((TortorSide == 1 && KeroncongSide == -1 && TortorLots < KeroncongLots && KeroncongTotalOrders >= MinOrders) || (KeroncongSide == 1 && TortorSide == -1 && KeroncongLots < TortorLots && TortorTotalOrders >= MinOrders))
			{
				return(true);
			}
			else
			{

				return(false);
			}
		}
		else if(Side == -1)
		{
			if((TortorSide == 1 && KeroncongSide == 0) || (KeroncongSide == 1 && TortorSide == 0))
			{
				return(true);
			}
			else if((TortorSide == -1 && KeroncongSide == 1 && TortorLots < KeroncongLots && KeroncongTotalOrders >= MinOrders) || (KeroncongSide == -1 && TortorSide == 1 && KeroncongLots < TortorLots && TortorTotalOrders >= MinOrders))
			{
				return(true);
			}
			else
			{

				return(false);
			}
		}
	}

	if(Magic == MagicNumber_Keroncong)
	{
		if(Side == 1)
		{
			if((JaipongSide == -1 && TortorSide == 0) || (TortorSide == -1 && JaipongSide == 0))
			{
				return(true);
			}
			else if((JaipongSide == 1 && TortorSide == -1 && JaipongLots < TortorLots && TortorTotalOrders >= MinOrders) || (TortorSide == 1 && JaipongSide == -1 && TortorLots < JaipongLots && JaipongTotalOrders >= MinOrders))
			{
				return(true);
			}
			else
			{

				return(false);
			}
		}
		else if(Side == -1)
		{
			if((JaipongSide == 1 && TortorSide == 0) || (TortorSide == 1 && JaipongSide == 0))
			{
				return(true);
			}
			else if((JaipongSide == -1 && TortorSide == 1 && JaipongLots < TortorLots && TortorTotalOrders >= MinOrders) || (TortorSide == -1 && JaipongSide == 1 && TortorLots < JaipongLots && JaipongTotalOrders >= MinOrders))
			{
				return(true);
			}
			else
			{

				return(false);
			}
		}
	}

	if(Magic == MagicNumber_Tortor)
	{
		if(Side == 1)
		{
			if((JaipongSide == -1 && KeroncongSide == 0) || (KeroncongSide == -1 && JaipongSide == 0))
			{
				return(true);
			}
			else if((JaipongSide == 1 && KeroncongSide == -1 && JaipongLots < KeroncongLots && KeroncongTotalOrders >= MinOrders) || (KeroncongSide == 1 && JaipongSide == -1 && KeroncongLots < JaipongLots && JaipongTotalOrders >= MinOrders))
			{
				return(true);
			}
			else
			{

				return(false);
			}
		}
		else if(Side == -1)
		{
			if((JaipongSide == 1 && KeroncongSide == 0) || (KeroncongSide == 1 && JaipongSide == 0))
			{
				return(true);
			}
			else if((JaipongSide == -1 && KeroncongSide == 1 && JaipongLots < KeroncongLots && KeroncongTotalOrders >= MinOrders) || (KeroncongSide == -1 && JaipongSide == 1 && KeroncongLots < JaipongLots && JaipongTotalOrders >= MinOrders))
			{
				return(true);
			}
			else
			{

				return(false);
			}
		}
	}
	Print("Something wrong with function \"OrdersSideOptimization\".");
	return(false);
}

void SetTakeProfit(int MagicNumber, double TakeProfit_)
{
	double avgPrice = 0.0;
	double sumLots  = 0.0;
	int orderType;
	int returnvalue;
	for (int order=OrdersTotal()-1; order >= 0; order--) 
	{
		returnvalue=OrderSelect(order, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) 
		{
			orderType = OrderType();
			avgPrice += OrderOpenPrice()*OrderLots();
			sumLots  += OrderLots();
		}
	}
	if(avgPrice == 0.0 || sumLots == 0.0)
	{
		return;
	}
	double newTakeProfit=avgPrice/sumLots;
	if (orderType==OP_BUY) 
	newTakeProfit=newTakeProfit+TakeProfit_*Point; 
	else 
	newTakeProfit=newTakeProfit-TakeProfit_*Point;
	newTakeProfit=NormalizeDouble(newTakeProfit,Digits);

	for (order=OrdersTotal()-1; order>=0; order--) 
	{
		returnvalue=OrderSelect(order, SELECT_BY_POS, MODE_TRADES);
		if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && (OrderTakeProfit() != newTakeProfit)) 
		{
			returnvalue=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),newTakeProfit,0,clrYellow);
		}
	}
}

bool Weekend()
{
	if ((CloseFriday == TRUE && DayOfWeek() == 5 && TimeCurrent() >= StrToTime(CloseFridayHour + ":00")) || (OpenMondey == TRUE && DayOfWeek() == 1 && TimeCurrent() <= StrToTime(OpenMondeyHour + ":00")))
	{
		return true;
	}
	else
	{
		return false;
	}
}

bool News()
{
	if(!AvoidNews)
	{
		return false;
	}
	if (iCustom(Symbol(),0,"urdala_news_investing.com",UTimeDo,UTimePosle,Uoffset,Vhigh,Vmedium,Vlow,0,0))
	{
		return true;
	}
	else
	{
		return false;
	}
}

bool AutoGridStep()
{
	if(!AutoGridStepAndProfit)
	{
		return true;
	}
	if(Bars(Symbol(), PERIOD_D1) < 6)
	{
		Alert(Symbol()+": Bars count PERIOD_D1 < 6. Expert Removed from chart!");
		return false;
	}
	int Days = 5;
	double sum_rng = 0.0;
	double avg_rng = 0.0;
	for(int i=1;i<=Days;i++) {
      double rng=(iHigh(Symbol(),PERIOD_D1,i)-iLow(Symbol(),PERIOD_D1,i));
      sum_rng+=rng;
	}
	avg_rng = (sum_rng/Point)/Days;
	Step_Keroncong = NormalizeDouble(avg_rng/3+TakeProfit,0);
	Step_Jaipong = NormalizeDouble(avg_rng/3+TakeProfit,0);
	Step_Tortor = NormalizeDouble(avg_rng/3+TakeProfit,0);
	TakeProfit = NormalizeDouble(Step_Keroncong/10,0);
	return true;
}icNumber() == MagicNumber_Jaipong)

		if (OrderType() == OP_SELL || OrderType() == OP_BUY) count_0++;

	}

	return (count_0);

}



void f0_24() {           //70:@KB85 2A5E Jaipong

	

	for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) {

		OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);

		if (OrderSymbol() == Symbol()) {

			if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong) {

				if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage_Jaipong, Blue);

				if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage_Jaipong, Red);

			}

			Sleep(1000);

		}

	}

}



//              >B:@KB85 ?>78F89 Jaipong



int f0_3(int Ai_0, double A_lots_4, double A_price_12, int A_slippage_20, double Ad_24, int Ai_32, int Ai_36, string A_comment_40, int A_magic_48, int A_datetime_52, co

Показано первые 50% кода (символов: 112708)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
11 270,80₽ ≈ $137.77