ringer clone.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ringer clone.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Торговый советник для MetaTrader 4, реализующий сеточную стратегию с усреднением позиций. Советник работает с четырьмя направлениями торговых позиций (BUY TREND, SELL TREND, BUY COUNTER, SELL COUNTER), используя для анализа скользящую среднюю (MA) и стохастик. В коде реализована автоматическая корректировка уровней Take Profit и Stop Loss у открытых позиций, а также функция трейлинг-стоп.
Советник поддерживает работу с несколькими инструментами одновременно, разделёнными запятой в настройках символов. Включён режим «сушка» для тестирования без реальной торговли, а также защита от чрезмерной просадки и недостаточной свободной маржи. Торговля приостанавливается при достижении заданных пороговых значений.
Параметры лотов включают фиксированный размер стартового лота и автоматический расчёт лота на основе процента от баланса. Дистанция усреднения и количество уровней настраиваются отдельно. В советник встроена система защиты с проверкой торгового времени, режима торговли инструмента и баланса счёта.
Настройки программы
| Настройка | Описание |
|---|---|
| Сушка (Dry) | Режим сушки — отключает реальную торговлю и позволяет тестировать советник без открытия настоящих позиций |
| Брокер 4-знака (Broker) | Переключатель выбора брокера с 4-значными котировками (предотвращение неточностей в ценовых расчётах) |
| ================================================= (_1) | Разделительный текстовый параметр для группировки настроек |
| Take profit (TakeProfit) | Расстояние Take Profit от цены открытия позиции в пунктах |
| Stop Loss (StopLosse) | Расстояние Stop Loss от цены открытия позиции в пунктах |
| Перевод в БУ при профите (NoLossePrf) | Уровень профита в пунктах, при достижении которого позиция переводится в безубыток |
| SL при БУ (NoLosseSL) | Значение Stop Loss в пунктах, применяемое при активации безубытка |
| ================================================= (_2) | Разделительный текстовый параметр для группировки настроек |
| Стартовый размер лота (Fixedlot) | Фиксированный размер стартового лота. Если задан нулевой значение, используется автоматический расчёт лота |
| Автоматический лот (работает если стартовый лот 0) (RiskLot) | Процент от баланса счёта, используемый для автоматического расчёта размера лота (работает при нулевом фиксированном лоте) |
| Коэфициент мартина (MartinKoef) | Множитель увеличения лота при каждом последующем уровне усреднения |
| ================================================= (_3) | Разделительный текстовый параметр для группировки настроек |
| Дистанция позиций усреднения (Distance) | Расстояние между позициями в сетке усреднения, измеряемое в пунктах |
| Максимальное количество усреднений (MaxPosUsr) | Максимальное допустимое количество усреднённых позиций в одной сетке |
| Коэфициент дистанции усреднения (DistanceKoef) | Множитель для расчёта дистанции между уровнями усреднения при увеличении количества позиций |
| ================================================= (_4) | Разделительный текстовый параметр для группировки настроек |
| Период MA (maPeriod) | Период скользящей средней (MA), используемой для определения тренда |
| Период стохастика K (PeriodStochK) | Период основной линии индикатора Стохастик |
| Период стохастика D (PeriodStochD) | Период сигнальной линии индикатора Стохастик |
| Замедление стохастика (SlowStoch) | Значение замедления (slowing) для индикатора Стохастик |
| ================================================= (_5) | Разделительный текстовый параметр для группировки настроек |
| Остановка торговли при просадке по счёту [%] (NoNewPosDrawdown) | Процентная просадка по счёту, при превышении которой останавливается открытие новых позиций |
| Остановка торговли при свободной марже меньше чем [%] (NoNewPosMargin) | Минимальный уровень свободной маржи в процентах, ниже которого открытие новых позиций блокируется |
| ================================================= (_6) | Разделительный текстовый параметр для группировки настроек |
| Не начинать новую сетку при просадке по счёту [%] (NoOpenCucleDD) | Процентная просадка по счёту, при превышении которой блокируется открытие новой сетки позиций |
| Не начинаь новую сетку при свободной маржке меньше чем [%] (NoOpenCucleMarg) | Минимальный уровень свободной маржи в денежном выражении, ниже которого блокируется открытие новой сетки |
Поиск по коду файла
#property version "1.00"
#property strict
const int ADMIN_ID=16; //моя панель
const int PRODUCT_ID=28;//RingerMT4
const string VERSION="1.00";
#include <sovetnikovNET/Time.mqh>
#include <EA_Protect\Protect.mqh>
enum ANSWER
{
ANSWER_NO = 0, // Нет
ANSWER_YES = 1 // Да
};
SHOW_LICENSE_PARAMS
input bool Dry=false; //Сушка
input ANSWER Broker = ANSWER_NO; //Брокер 4-знака
sinput string _1="====";//=================================================
input double TakeProfit = 30; //Take profit
input double StopLosse = 253; //Stop Loss
input int NoLossePrf = 10; //Перевод в БУ при профите
input int NoLosseSL = 7; //SL при БУ
sinput string _2="====";//=================================================
input double Fixedlot = 0.00; //Стартовый размер лота
input double RiskLot=0.05; //Автоматический лот (работает если стартовый лот 0)
input double MartinKoef = 1.5; //Коэфициент мартина
sinput string _3="====";//=================================================
input double Distance = 21.0; //Дистанция позиций усреднения
input int MaxPosUsr = 12; //Максимальное количество усреднений
input double DistanceKoef = 1.0; //Коэфициент дистанции усреднения
sinput string _4="====";//=================================================
input int maPeriod = 20; //Период MA
input int PeriodStochK = 10; //Период стохастика K
input int PeriodStochD = 3;//Период стохастика D
input int SlowStoch = 3;//Замедление стохастика
sinput string _5="====";//=================================================
input int NoNewPosDrawdown=75;//Остановка торговли при просадке по счёту [%]
input int NoNewPosMargin=700;//Остановка торговли при свободной марже меньше чем [%]
sinput string _6="====";//=================================================
input int NoOpenCucleDD=7;//Не начинать новую сетку при просадке по счёту [%]
input int NoOpenCucleMarg=4000; //Не начинаь новую сетку при свободной маржке меньше чем [%]
int iMagic7786 = 7786;
int iMagic7876 = 7876;
int iMagic8776 = 8776;
int iMagic17776 = 17776;
int Gi_4;
int Gi_6;
int Gi_7;
bool bret;
int Gi_C;
int Gi_D;
int Gi_E;
int Gi_10;
int Gi_11;
int Gi_14;
int Gi_15;
int Gi_1;
int Gi_2;
int Gi_3;
double Gd_0;
int Gi_0;
int Gi_5;
int Gi_B;
double Gd_1;
bool Gb_0;
int Gi_A;
int Gi_F;
int Gi_12;
int Gi_13;
double Gd_15;
double Gd_16;
int Gi_17;
double Gd_17;
int Gi_19;
bool Gb_19;
int Gi_1B;
int Gi_1C;
int Gi_1D;
int Gi_1E;
int Gi_1F;
int Gi_20;
int Gi_21;
int Gi_22;
int Gi_23;
double Gd_23;
int Gi_25;
double Gd_25;
double Gd_26;
int Gi_27;
int Gi_28;
int Gi_29;
int Gi_2A;
int Gi_2B;
int Gi_2C;
int Gi_2D;
int Gi_2E;
int Gi_2F;
double Gd_2F;
bool Gb_33;
bool Gb_34;
double Gd_3;
double Gd_8;
double Gd_19;
double Gd_1B;
int Gi_24;
double Gd_2;
bool Gb_2;
bool Gb_4;
double Gd_4;
double Gd_5;
bool Gb_6;
double Gd_6;
double Gd_7;
double Gd_9;
bool Gb_A;
double Gd_D;
double Gd_E;
bool Gb_10;
double Gd_10;
double Gd_11;
double Gd_14;
bool Gb_16;
int Gi_18;
double Gd_1A;
bool Gb_1C;
double Gd_1C;
double Gd_1D;
double Gd_20;
bool Gb_22;
bool Gb_28;
double Gd_28;
double Gd_29;
double Gd_2C;
bool Gb_2E;
bool checkEntry2(bool a1, bool a2, int a3, int a4)
{
return !a1 && a2 && !a3 && a4 == 2;
}
bool checkEntry1(bool a1, bool a2, int a3, int a4)
{
return !a1 && a2 && !a3 && a4 == -2;
}
double getTakeProfit(int a1, int a2, double a3, double a4)
{
double result; // fst7
double v5; // [esp+18h] [ebp+18h]
if(a2==0.0)
return 0.0;
v5 = (double)a2 *a4;
if(a1==OP_BUY)
result = a3 + v5;
else
result = a3 - v5;
return result;
}
int getEntryConfirmation(double a1, double a2, double a3, double a4, int a5)
{
if(a5 != 1)
{
if(a5 != -1)
return 0;
if(a3 <= 50)
{
return -2;
}
return 2;
}
if(a2 > a1 && a3 > 50)
return 2;
if(a1 <= a2)
return 0;
if(a4 <50)
{
return -2;
}
return 0;
}
class GridSettings
{
public:
int m_Digits;
int m_iMagic8776;
int m_iMagic7786;
int m_iMagic17776;
int m_iMagic7876;
int m_Level_Max;
int PeriodStochD;
int PeriodStochK;
int m_MA_Period;
int SlowStoch;
int dMinTral;
int dTrailingStop;
double m_LotMultiplicator;
double m_Step;
double m_StepMultiplicator;
double m_FixedLot;
double dStopLoss;
double dTakeProfit;
string sSymbol;
};
class GridProperties : public GridSettings
{
public:
double dBalance;
double dMaxLot;
double dTickSize;
int iLastTicket;
};
class RingGrid
{
public:
RingGrid(GridProperties& arg_0)
{
double Ld_0;
Ld_0 = 0;
this.eGridProperties.m_Digits = arg_0.m_Digits;
this.eGridProperties.m_iMagic8776 = arg_0.m_iMagic8776;
this.eGridProperties.m_iMagic7786 = arg_0.m_iMagic7786;
this.eGridProperties.m_iMagic17776 = arg_0.m_iMagic17776;
this.eGridProperties.m_iMagic7876 = arg_0.m_iMagic7876;
this.eGridProperties.m_LotMultiplicator = arg_0.m_LotMultiplicator;
this.eGridProperties.m_Level_Max = arg_0.m_Level_Max;
this.eGridProperties.PeriodStochD = arg_0.PeriodStochD;
this.eGridProperties.PeriodStochK = arg_0.PeriodStochK;
this.eGridProperties.m_MA_Period = arg_0.m_MA_Period;
this.eGridProperties.SlowStoch = arg_0.SlowStoch;
this.eGridProperties.m_Step = arg_0.m_Step;
this.eGridProperties.m_StepMultiplicator = arg_0.m_StepMultiplicator;
this.eGridProperties.m_FixedLot = arg_0.m_FixedLot;
this.eGridProperties.dMinTral = arg_0.dMinTral;
this.eGridProperties.dStopLoss = arg_0.dStopLoss;
this.eGridProperties.sSymbol = arg_0.sSymbol;
this.eGridProperties.dTakeProfit = arg_0.dTakeProfit;
this.eGridProperties.dTrailingStop = arg_0.dTrailingStop;
this.eGridProperties.dBalance = AccountBalance();
this.eGridProperties.iLastTicket = 0;
Gd_0 = MarketInfo(this.eGridProperties.sSymbol, MODE_MAXLOT);
Gd_1 = MarketInfo(this.eGridProperties.sSymbol, MODE_MINLOT);
Gd_2 = MarketInfo(this.eGridProperties.sSymbol, MODE_LOTSTEP);
Gd_3 = (int)(this.eGridProperties.m_FixedLot / Gd_2);
Gd_3 = (double)(Gd_2 * NormalizeDouble(Gd_3, 0));
if(Gd_3==0.0)
Gd_3=GetAutoLot();
Gd_4 = Gd_1;
Gd_5 = Gd_0;
if(Gd_0 >= Gd_3)
{
Gd_3 = Gd_3;
}
else
{
Gd_3 = Gd_5;
}
if(Gd_3 <= Gd_4)
{
Gd_5 = Gd_4;
}
else
{
Gd_5 = Gd_3;
}
this.eGridProperties.dMaxLot = Gd_5;
this.eGridProperties.dTickSize = MarketInfo(this.eGridProperties.sSymbol, MODE_TICKSIZE);
if(this.eGridProperties.m_Digits == 5)
{
this.eGridProperties.dTickSize = (this.eGridProperties.dTickSize * 10);
Ld_0 = (MarketInfo(this.eGridProperties.sSymbol, MODE_STOPLEVEL) / 10);
}
else
{
if(this.eGridProperties.m_Digits == 4)
{
Ld_0 = MarketInfo(this.eGridProperties.sSymbol, MODE_STOPLEVEL);
}
}
if(this.eGridProperties.dStopLoss > 0)
{
if(this.eGridProperties.dStopLoss < Ld_0)
{
Print("stoploss is too tight.");
this.eGridProperties.dStopLoss = Ld_0;
}
}
if(this.eGridProperties.dTakeProfit > 0)
{
if(this.eGridProperties.dTakeProfit < Ld_0)
{
Print("takeprofit is too tight.");
this.eGridProperties.dTakeProfit = Ld_0;
}
}
if(this.eGridProperties.dTrailingStop < Ld_0)
{
Print("trailing is too tight.");
this.eGridProperties.dTrailingStop = (int)Ld_0;
}
}
void Run(bool bNoStop,bool bNoDry)
{
string str_0;
string str_1;
string sSymbol;
string sVariableText;
string str_4;
string str_5;
string str_6;
string str_7;
string str_8;
string str_9;
string str_A;
string str_B;
string str_C;
string str_D;
string str_E;
string str_F;
str_0 = "BUY TREND-Lvl-";
if(bNoStop)
AverageOrders(this.eGridProperties.m_iMagic7786, str_0);
str_1 = "SELL TREND-Lvl-";
if(bNoStop)
AverageOrders(this.eGridProperties.m_iMagic7876, str_1);
sSymbol = "BUY COUNTER-Lvl-";
if(bNoStop)
AverageOrders(this.eGridProperties.m_iMagic8776, sSymbol);
sVariableText = "SELL COUNTER-Lvl-";
if(bNoStop)
AverageOrders(this.eGridProperties.m_iMagic17776, sVariableText);
Gi_0 = this.eGridProperties.m_iMagic7786;
Gd_1 = 0;
Gd_2 = 0;
str_4 = this.eGridProperties.sSymbol;
Gi_3 = getCountBySymbolAndMagic(str_4, this.eGridProperties.m_iMagic7786);
if(Gi_3 != 0)
{
Gb_4 = (this.eGridProperties.dTakeProfit == 0);
if(Gb_4 != true)
{
str_5 = this.eGridProperties.sSymbol;
Gd_4 = getAveragePrice(str_5, Gi_0, 0);
str_6 = this.eGridProperties.sSymbol;
Gd_5 = getAveragePrice(str_6, Gi_0, 1);
if(Gd_5 <= Gd_4)
{
Gd_4 = Gd_4;
}
else
{
Gd_4 = Gd_5;
}
Gd_1 = Gd_4;
Gi_4 = OrdersTotal() - 1;
Gi_6 = Gi_4;
if(Gi_4 >= 0)
{
do
{
bret = OrderSelect(Gi_6, 0, 0);
if(bret)
{
if(OrderSymbol() == this.eGridProperties.sSymbol)
{
if(OrderMagicNumber() == Gi_0)
{
if(Gi_3 < 3)
{
Gd_2 = getTakeProfit(OrderType(), (int)this.eGridProperties.dTakeProfit, OrderOpenPrice(), this.eGridProperties.dTickSize);
}
else
{
Gd_2 = getTakeProfit(OrderType(), 7, Gd_1, this.eGridProperties.dTickSize);
}
Gd_8 = MarketInfo(this.eGridProperties.sSymbol, MODE_POINT);
Gd_9 = (Gd_2 / Gd_8);
Gd_9 = NormalizeDouble(Gd_9, 0);
double dttp = (OrderTakeProfit() / Gd_8);
Gb_A = (Gd_9 == NormalizeDouble(dttp, 0));
if(Gb_A != true)
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Gd_2, 0, 4294967295)) {}
}
}
}
}
Gi_6 = Gi_6 - 1;
}
while(Gi_6 >= 0);
}
}
}
Gi_C = this.eGridProperties.m_iMagic7876;
Gd_D = 0;
Gd_E = 0;
str_7 = this.eGridProperties.sSymbol;
Gi_F = getCountBySymbolAndMagic(str_7, this.eGridProperties.m_iMagic7876);
if(Gi_F != 0)
{
Gb_10 = (this.eGridProperties.dTakeProfit == 0);
if(Gb_10 != true)
{
str_8 = this.eGridProperties.sSymbol;
Gd_10 = getAveragePrice(str_8, Gi_C, 0);
str_9 = this.eGridProperties.sSymbol;
Gd_11 = getAveragePrice(str_9, Gi_C, 1);
if(Gd_11 <= Gd_10)
{
Gd_10 = Gd_10;
}
else
{
Gd_10 = Gd_11;
}
Gd_D = Gd_10;
Gi_10 = OrdersTotal() - 1;
Gi_12 = Gi_10;
if(Gi_10 >= 0)
{
do
{
bret = OrderSelect(Gi_12, 0, 0);
if(bret)
{
if(OrderSymbol() == this.eGridProperties.sSymbol)
{
if(OrderMagicNumber() == Gi_C)
{
if(Gi_F < 3)
{
Gd_E = getTakeProfit(OrderType(), (int)this.eGridProperties.dTakeProfit, OrderOpenPrice(), this.eGridProperties.dTickSize);
}
else
{
Gd_E = getTakeProfit(OrderType(), 7, Gd_D, this.eGridProperties.dTickSize);
}
Gd_14 = MarketInfo(this.eGridProperties.sSymbol, 11);
Gd_15 = (Gd_E / Gd_14);
Gd_15 = NormalizeDouble(Gd_15, 0);
Gd_16 = (OrderTakeProfit() / Gd_14);
Gb_16 = (Gd_15 == NormalizeDouble(Gd_16, 0));
if(Gb_16 != true)
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Gd_E, 0, 4294967295)) {}
}
}
}
}
Gi_12 = Gi_12 - 1;
}
while(Gi_12 >= 0);
}
}
}
Gi_18 = this.eGridProperties.m_iMagic8776;
Gd_19 = 0;
Gd_1A = 0;
str_A = this.eGridProperties.sSymbol;
Gi_1B = getCountBySymbolAndMagic(str_A, this.eGridProperties.m_iMagic8776);
if(Gi_1B != 0)
{
Gb_1C = (this.eGridProperties.dTakeProfit == 0);
if(Gb_1C != true)
{
str_B = this.eGridProperties.sSymbol;
Gd_1C = getAveragePrice(str_B, Gi_18, 0);
str_C = this.eGridProperties.sSymbol;
Gd_1D = getAveragePrice(str_C, Gi_18, 1);
if(Gd_1D <= Gd_1C)
{
Gd_1C = Gd_1C;
}
else
{
Gd_1C = Gd_1D;
}
Gd_19 = Gd_1C;
Gi_1C = OrdersTotal() - 1;
Gi_1E = Gi_1C;
if(Gi_1C >= 0)
{
do
{
bret = OrderSelect(Gi_1E, 0, 0);
if(bret)
{
if(OrderSymbol() == this.eGridProperties.sSymbol)
{
if(OrderMagicNumber() == Gi_18)
{
if(Gi_1B < 3)
{
Gd_1A = getTakeProfit(OrderType(), (int)this.eGridProperties.dTakeProfit, OrderOpenPrice(), this.eGridProperties.dTickSize);
}
else
{
Gd_1A = getTakeProfit(OrderType(), 7, Gd_19, this.eGridProperties.dTickSize);
}
Gd_20 = MarketInfo(this.eGridProperties.sSymbol, MODE_POINT);
Gb_22 = (NormalizeDouble(Gd_1A / Gd_20, 0) == NormalizeDouble(OrderTakeProfit() / Gd_20, 0));
if(Gb_22 != true)
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Gd_1A, 0, 4294967295)) {}
}
}
}
}
Gi_1E = Gi_1E - 1;
}
while(Gi_1E >= 0);
}
}
}
Gi_24 = this.eGridProperties.m_iMagic17776;
Gd_25 = 0;
Gd_26 = 0;
str_D = this.eGridProperties.sSymbol;
Gi_27 = getCountBySymbolAndMagic(str_D, this.eGridProperties.m_iMagic17776);
if(Gi_27 != 0)
{
Gb_28 = (this.eGridProperties.dTakeProfit == 0);
if(Gb_28 != true)
{
str_E = this.eGridProperties.sSymbol;
Gd_28 = getAveragePrice(str_E, Gi_24, 0);
str_F = this.eGridProperties.sSymbol;
Gd_29 = getAveragePrice(str_F, Gi_24, 1);
if(Gd_29 <= Gd_28)
{
Gd_28 = Gd_28;
}
else
{
Gd_28 = Gd_29;
}
Gd_25 = Gd_28;
Gi_28 = OrdersTotal() - 1;
Gi_2A = Gi_28;
if(Gi_28 >= 0)
{
do
{
bret = OrderSelect(Gi_2A, 0, 0);
if(bret)
{
if(OrderSymbol() == this.eGridProperties.sSymbol)
{
if(OrderMagicNumber() == Gi_24)
{
if(Gi_27 < 3)
{
Gd_26 = getTakeProfit(OrderType(), (int)this.eGridProperties.dTakeProfit, OrderOpenPrice(), this.eGridProperties.dTickSize);
}
else
{
Gd_26 = getTakeProfit(OrderType(), 7, Gd_25, this.eGridProperties.dTickSize);
}
Gd_2C = MarketInfo(this.eGridProperties.sSymbol, MODE_POINT);
Gb_2E = (NormalizeDouble(Gd_26 / Gd_2C, 0) == NormalizeDouble(OrderTakeProfit() / Gd_2C, 0));
if(Gb_2E != true)
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Gd_26, 0, 4294967295)) {}
}
}
}
}
Gi_2A = Gi_2A - 1;
}
while(Gi_2A >= 0);
}
}
}
funcTrailingStop(this.eGridProperties.m_iMagic7786);
funcTrailingStop(this.eGridProperties.m_iMagic7876);
funcTrailingStop(this.eGridProperties.m_iMagic8776);
funcTrailingStop(this.eGridProperties.m_iMagic17776);
if(bNoDry)
OpenOrders(); //если сушка выклчюена разрешаем
}
protected:
GridProperties eGridProperties;
double GetAutoLot()
{
return funcNLot(AccountBalance()*RiskLot/100000);
}
virtual double funcNLot(double arg_0)
{
double Ld_E8;
double Ld_E0;
double Ld_D8;
double Ld_D0;
double Ld_0;
Ld_E8 = MarketInfo(this.eGridProperties.sSymbol, MODE_MAXLOT);
Ld_E0 = MarketInfo(this.eGridProperties.sSymbol, MODE_MINLOT);
Ld_D8 = MarketInfo(this.eGridProperties.sSymbol, MODE_LOTSTEP);
Gd_0 = (arg_0 / Ld_D8);
Ld_D0 = (Ld_D8 * NormalizeDouble(Gd_0, 0));
Gd_0 = Ld_E0;
Gd_1 = Ld_E8;
if(Ld_E8 >= Ld_D0)
{
Gd_2 = Ld_D0;
}
else
{
Gd_2 = Gd_1;
}
if(Gd_2 <= Gd_0)
{
Gd_1 = Gd_0;
}
else
{
Gd_1 = Gd_2;
}
Ld_0 = Gd_1;
return Gd_1;
}
virtual void OpenOrders()
{
string str_0;
string str_1;
string sSymbol;
string sVariableText;
string str_4;
string str_5;
string str_6;
string str_7;
string str_8;
string str_9;
string str_A;
string str_B;
string str_C;
string sCommentBuy1;
string sCommentSell1;
string sCommentBuyCounter1;
string sCommentSellCounter1;
double dPriceMA;
double dPriceStoch1;
double dPriceStoch2;
double dPriceClose1;
int Li_9C;
double Ld_90;
double Ld_88;
double dprice;
double Ld_78;
double Ld_70;
double Ld_68;
sCommentBuy1 = "BUY TREND-Lvl-";
sCommentSell1 = "SELL TREND-Lvl-";
sCommentBuyCounter1 = "BUY COUNTER-Lvl-";
sCommentSellCounter1 = "SELL COUNTER-Lvl-";
dPriceMA = iMA(this.eGridProperties.sSymbol, 0, this.eGridProperties.m_MA_Period, 0, MODE_LWMA, PRICE_CLOSE, 0);
dPriceStoch1 = iStochastic(this.eGridProperties.sSymbol, 0, this.eGridProperties.PeriodStochK, this.eGridProperties.PeriodStochD, this.eGridProperties.SlowStoch, 0, 0, 0, 0);
dPriceStoch2 = iStochastic(this.eGridProperties.sSymbol, 0, this.eGridProperties.PeriodStochK, this.eGridProperties.PeriodStochD, this.eGridProperties.SlowStoch, 0, 0, 0, 0);
dPriceClose1 = iClose(this.eGridProperties.sSymbol, _Period, 1);
Li_9C = getEntryConfirmation(dPriceClose1, dPriceMA, dPriceStoch1, dPriceStoch2, 1);/*
0,
2,
-2,
*/
this.eGridProperties.dMaxLot=GetAutoLot();
Ld_90 = AccountFreeMarginCheck(this.eGridProperties.sSymbol, 0, this.eGridProperties.dMaxLot);
Ld_88 = AccountFreeMarginCheck(this.eGridProperties.sSymbol, 1, this.eGridProperties.dMaxLot);
if(Ld_90 > 0)
{
str_0 = this.eGridProperties.sSymbol;
bret = checkEntry1(false, true, getCountBySymbolAndMagic(str_0, this.eGridProperties.m_iMagic7786), Li_9C);//li_9c = 2, -2
if(bret)
{
dprice = MarketInfo(this.eGridProperties.sSymbol, MODE_ASK);
str_1 = "BUY TREND-Lvl-0";
Gd_0 = (this.eGridProperties.dStopLoss * this.eGridProperties.dTickSize);
Gd_1 = (dprice - Gd_0);
this.eGridProperties.iLastTicket = OrderSend(this.eGridProperties.sSymbol, 0, this.eGridProperties.dMaxLot, dprice, 3, Gd_1, 0, str_1, this.eGridProperties.m_iMagic7786, 0, 16777215);
sSymbol = (string)this.eGridProperties.iLastTicket;
sSymbol = "Opening #" + sSymbol;
sSymbol = sSymbol + " ";
sSymbol = sSymbol + "BUY TREND-Lvl-";
sSymbol = sSymbol + "0";
sSymbol = sSymbol + " ";
sSymbol = sSymbol + DoubleToString(this.eGridProperties.dMaxLot, 2);
sSymbol = sSymbol + " at ";
sVariableText = (string)dprice;
sSymbol = sSymbol + sVariableText;
sSymbol = sSymbol + " sl: ";
sVariableText = (string)(dprice - Gd_0);
sSymbol = sSymbol + sVariableText;
Print(sSymbol);
}
}
else
{
Print("Not enough money for buy");
}
if(Ld_88 > 0)
{
sVariableText = this.eGridProperties.sSymbol;
bret = checkEntry2(false, true, getCountBySymbolAndMagic(sVariableText, this.eGridProperties.m_iMagic7876), Li_9C);
if(bret)
{
Ld_78 = MarketInfo(this.eGridProperties.sSymbol, MODE_BID);
str_4 = sCommentSell1 + "0";
Gd_2 = (this.eGridProperties.dStopLoss * this.eGridProperties.dTickSize);
Gd_3 = (Gd_2 + Ld_78);
this.eGridProperties.iLastTicket = OrderSend(this.eGridProperties.sSymbol, 1, this.eGridProperties.dMaxLot, Ld_78, 3, Gd_3, 0, str_4, this.eGridProperties.m_iMagic7876, 0, 16776960);
str_5 = (string)this.eGridProperties.iLastTicket;
str_5 = "Opening #" + str_5;
str_5 = str_5 + " ";
str_5 = str_5 + sCommentSell1;
str_5 = str_5 + "0";
str_5 = str_5 + " ";
str_5 = str_5 + DoubleToString(this.eGridProperties.dMaxLot, 2);
str_5 = str_5 + " at ";
str_6 = (string)Ld_78;
str_5 = str_5 + str_6;
str_5 = str_5 + " sl: ";
str_6 = (string)(Ld_78 + Gd_2);
str_5 = str_5 + str_6;
Print(str_5);
}
}
else
{
Print("Not enough money for sell");
}
Li_9C = getEntryConfirmation(dPriceClose1, dPriceMA, dPriceStoch1, dPriceStoch2, -1);
if(Ld_90 > 0)
{
str_6 = this.eGridProperties.sSymbol;
bret = checkEntry1(false, true, getCountBySymbolAndMagic(str_6, this.eGridProperties.m_iMagic8776), Li_9C);
if(bret)
{
Ld_70 = MarketInfo(this.eGridProperties.sSymbol, MODE_ASK);
str_7 = sCommentBuyCounter1 + "0";
Gd_4 = (this.eGridProperties.dStopLoss * this.eGridProperties.dTickSize);
Gd_5 = (Ld_70 - Gd_4);
this.eGridProperties.iLastTicket = OrderSend(this.eGridProperties.sSymbol, 0, this.eGridProperties.dMaxLot, Ld_70, 3, Gd_5, 0, str_7, this.eGridProperties.m_iMagic8776, 0, 16711680);
str_8 = (string)this.eGridProperties.iLastTicket;
sПоказано первые 50% кода (символов: 29486)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.