Помощь в кодировании - страница 507

 
tristantsh:
Спасибо mntiwana и malden. но почему я должен покупать снова? Можете ли вы отправить эти индикаторы в сообщениях

Отправьте оригинальное письмо со ссылкой, которую вы получили при покупке индикатора, на адрес support@forex-tsd.com, и, если все в порядке, вы получите обновленную версию.

 

Хорошо, Мланден. Но индикатор до nmc выглядит интереснее, чем после nmc. Это просто мои ощущения?

 
tristantsh:
Хорошо, Мланден. Но индикатор до nmc выглядит интереснее, чем после nmc. Это просто мои ощущения?

Результаты версии "nmc" совершенно не изменились по сравнению с версией "pre-nmc". "nmc" означает "new metatrader compatible".

всего наилучшего

 

Почему?

Младен,

Пожалуйста, не могли бы вы объяснить мне причину, почему эта ea не работает.

//----------------------- ПАРАМЕТР EA

внешняя строка

Expert_Name = "---------- Pending Order EA v1",

Expert_Name2 = "---------- Для текущей цены установите EntryLevel = 0";

extern double

EntryLevel = 1.8600,

Distance = 100,

StopLoss = 50,

TakeProfit = 50,

TrailingStop = 50;

внешняя строка

Order_Setting = "---------- Order Setting";

extern int

NumberOfTries = 5,

Slippage = 5,

MagicNumber = 1234;

внешняя строка

MM_Parameters = "---------- Money Management";

extern double

Lots =0.01;

extern bool

MM = false, //Использовать управление капиталом или нет

AccountIsMicro = true; //Использовать микро-счет или нет

extern int

Risk = 0; //10%

строка extern

Testing_Parameters = "---------- Back Test Parameter";

extern bool

Show_Settings = true;

//----------------------- ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ

статическое значение int

TimeFrame = 0;

string

TicketComment = "PendingOrderEA v2",

LastTrade;

bool

TradeAllow = true,

EntryAllow = true;

//+------------------------------------------------------------------+

//| функция инициализации эксперта |

//+------------------------------------------------------------------+

int init()

{

//----------------------- ГЕНЕРИРУЕМ МАГИЧЕСКИЙ НОМЕР И КОММЕНТАРИЙ К БИЛЕТУ

//----------------------- ИСТОЧНИК : PENGIE

MagicNumber = subGenerateMagicNumber(MagicNumber, Symbol(), Period());

TicketComment = StringConcatenate(TicketComment, "-", Symbol(), "-", Period());

//----------------------- ОТОБРАЖЕНИЕ НАСТРОЕК EA НА ГРАФИКЕ

//----------------------- ИСТОЧНИК : CODERSGURU

if(Show_Settings) subPrintDetails();

else Comment("");

return(0);

}

//+------------------------------------------------------------------+

//| функция деинициализации эксперта | |

//+------------------------------------------------------------------+

int deinit()

{

//----------------------- ПРЕДОТВРАЩАЕТ ПОВТОРНЫЙ ПОДСЧЕТ ПРИ ИЗМЕНЕНИИ ПОЛЬЗОВАТЕЛЕМ ВРЕМЕННОГО ИНТЕРВАЛА

//----------------------- ИСТОЧНИК : CODERSGURU

TimeFrame=Period();

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

double

// BuyLevel,

SellLevel;

int

cnt,

билет,

total;

//----------------------- УСТАНОВИТЬ ЦЕНУ ПОКУПКИ И ПРОДАЖИ

if(EntryLevel==0) EntryLevel = Bid;

// BuyLevel = EntryLevel + Distance*Point;

SellLevel = EntryLevel - Distance*Point;

// if((BuyLevel-Ask)<10*Point || (Bid-SellLevel)<10*Point)

// {

// Comment("Invalid Entry Price or Distance");

// return(0);

// }

//----------------------- СКОРРЕКТИРУЙТЕ ЛОТЫ, ЕСЛИ ИСПОЛЬЗУЕТЕ УПРАВЛЕНИЕ КАПИТАЛОМ

if(MM) Lots = subLotSize();

//----------------------- ENTRY

//----------------------- ОБЩИЙ ОРДЕР НА ОСНОВЕ MAGICNUMBER И СИМВОЛА

total = subTotalTrade();

//----------------------- УСТАНОВИТЕ ОРДЕР ТОЛЬКО 1 РАЗ

if(TradeAllow)

{

//----------------------- ЕСЛИ НЕТ ТОРГОВЛИ

if(total<1 && EntryAllow)

{

ticket = OrderSend(Symbol(),OP_SELLSTOP,Lots,SellLevel,Slippage,SellLevel+StopLoss*Point,SellLevel-TakeProfit*Point,TicketComment,MagicNumber,0,Red);

// ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyLevel,Slippage,BuyLevel-StopLoss*Point,BuyLevel+TakeProfit*Point,TicketComment,MagicNumber,0,Green);

EntryAllow = false;

return(0);

}

if(total==1)

{

subDeleteOrder();

TradeAllow = false;

}

}

//----------------------- СЕКЦИЯ ТРЕЙЛИНГ-СТОПА

if(TrailingStop>0 && subTotalTrade()>0)

{

total = OrdersTotal();

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL &&

OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber)

{

subTrailingStop(OrderType());

return(0);

}

}

}

return(0);

}

//----------------------- END PROGRAM

//+------------------------------------------------------------------+

//| ОПРЕДЕЛЕНИЯ ФУНКЦИЙ

//+------------------------------------------------------------------+

//----------------------- ФУНКЦИЯ УПРАВЛЕНИЯ ДЕНЬГАМИ

//----------------------- ИСТОЧНИК : CODERSGURU

double subLotSize()

{

double lotMM = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;

if(AccountIsMicro==false) //нормальный счет

{

if(lotMM < 0.1) lotMM = Lots;

if((lotMM > 0.5) && (lotMM < 1)) lotMM = 0.5;

if(lotMM > 1.0) lotMM = MathCeil(lotMM);

if(lotMM > 100) lotMM = 100;

}

else //micro account

{

if(lotMM < 0.01) lotMM = Lots;

if(lotMM > 1.0) lotMM = MathCeil(lotMM);

if(lotMM > 100) lotMM = 100;

}

return (lotMM);

}

//----------------------- КОЛИЧЕСТВО ОРДЕРОВ НА ОСНОВЕ СИМВОЛА И ФУНКЦИИ MAGICNUMBER

int subTotalTrade()

{

int

cnt,

total = 0;

for(cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderType()<=OP_SELL &&

OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber) total++;

}

return(total);

}

//----------------------- ФУНКЦИЯ УДАЛЕНИЯ ЗАКАЗА

void subDeleteOrder()

{

int

cnt,

total = 0;

total = OrdersTotal();

for(cnt=total-1;cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber)

{

switch(OrderType())

{

// case OP_BUYLIMIT :

// case OP_BUYSTOP :

// case OP_SELLLIMIT:

// case OP_SELLSTOP :

OrderDelete(OrderTicket());

}

}

}

}

//----------------------- ФУНКЦИЯ ТРЕЙЛИНГ-СТОП

//----------------------- ИСТОЧНИК : CODERSGURU

//----------------------- МОДИФИЦИРОВАНО : FIREDAVE

void subTrailingStop(int Type)

{

if(Type==OP_BUY) // открыта позиция на покупку

{

if(Bid-OrderOpenPrice()>Point*TrailingStop &&

OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

if(Type==OP_SELL) // открыта позиция на продажу

{

if(OrderOpenPrice()-Ask>Point*TrailingStop)

{

if(OrderStopLoss()>Ask+Point*TrailingStop || OrderStopLoss()==0)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

//----------------------- ГЕНЕРИРУЕМ МАГИЧЕСКОЕ ЧИСЛО НА ОСНОВЕ СИМВОЛА И ФУНКЦИИ ТАЙМФРЕЙМА

//----------------------- ИСТОЧНИК : PENGIE

//----------------------- МОДИФИЦИРОВАНО : FIREDAVE

int subGenerateMagicNumber(int MagicNumber, string symbol, int timeFrame)

{

int isymbol = 0;

if (symbol == "EURUSD") isymbol = 1;

else if (symbol == "GBPUSD") isymbol = 2;

else if (symbol == "USDJPY") isymbol = 3;

else if (symbol == "AUDCAD") isymbol = 4;

else if (symbol == "AUDUSD") isymbol = 5;

else if (symbol == "USDCAD") isymbol = 6;

else if (symbol == "EURGBP") isymbol = 7;

else if (symbol == "EURJPY") isymbol = 8;

else if (symbol == "EURCHF") isymbol = 9;

else if (symbol == "EURAUD") isymbol = 10;

else if (symbol == "EURCAD") isymbol = 11;

else if (symbol == "GBPUSD") isymbol = 12;

else if (symbol == "GBPJPY") isymbol = 13;

else if (symbol == "GBPCHF") isymbol = 14;

else if (symbol == "GBPAUD") isymbol = 15;

else if (symbol == "GBPCAD") isymbol = 16;

else isymbol = 17;

if(isymbol<10) MagicNumber = MagicNumber * 10;

return (StrToInteger(StringConcatenate(MagicNumber, isymbol, timeFrame)));

}

//----------------------- ФУНКЦИЯ ПЕЧАТИ КОММЕНТАРИЯ

//----------------------- ИСТОЧНИК : CODERSGURU

void subPrintDetails()

{

string sComment = "";

string sp = "----------------------------------------\n";

string NL = "\n";

sComment = sp;

sComment = sComment + "TakeProfit=" + DoubleToStr(TakeProfit,0) + " | ";

sComment = sComment + "TrailingStop=" + DoubleToStr(TrailingStop,0) + " | ";

sComment = sComment + "StopLoss=" + DoubleToStr(StopLoss,0) + NL;

sComment = sComment + sp;

sComment = sComment + "Lots=" + DoubleToStr(Lots,2) + " | ";

sComment = sComment + "MM=" + subBoolToStr(MM) + " | ";

sComment = sComment + "Risk=" + DoubleToStr(Risk,0) + "%" + NL;

sComment = sComment + sp;

Comment(sComment);

}

//----------------------- ПРЕОБРАЗОВАНИЕ BOOLEN ПЕРЕМЕННОЙ В СТРОКОВУЮ ФУНКЦИЮ.

//----------------------- ИСТОЧНИК : CODERSGURU

string subBoolToStr ( bool value)

{

if(value) return ("True");

else return ("False");

}

//----------------------- КОНЕЦ ФУНКЦИИ

Заранее спасибо.

Jo

 

Младен,

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

Файлы:
 
candyman752:
mladen, надеюсь, у вас все хорошо. ниже есть две ошибки при компиляции. будьте добры помочь.

candyman752

Попробуйте сейчас: rstochalert-4tf_1.mq4

Файлы:
 

Дорогой МЛАДЕН,

(мои вопросы всегда касаются помощи в ремонте, а не в кодировании)

у меня есть просьба понять..... посмотрите на 2 картинки, которые я добавил, первая с 1 ошибкой и 2 предупреждениями относительно строк 70 и 72.... как вы можете видеть на второй картинке, я заменил и 1 ошибка и 1 предупреждение удалены...... мой вопрос... правильно ли это делать таким образом.... и второй вопрос о 2-ом предупреждении, которое все еще позади в строке 80... если оставить как есть, нет проблем в функционировании?

с уважением

mntiwana

 
mntiwana:
Дорогой МЛАДЕН,

(мои вопросы всегда касаются помощи в ремонте, а не в кодировании)

у меня есть просьба понять..... посмотрите на 2 картинки, которые я добавил, первая с 1 ошибкой и 2 предупреждениями относительно строк 70 и 72.... как вы можете видеть на второй картинке, я заменил и 1 ошибка и 1 предупреждение удалены...... мой вопрос... правильно ли это делать таким образом.... и второй вопрос о 2-ом предупреждении, которое все еще позади в строке 80... если оставить все как есть, нет проблем в работе?

с уважением

mntiwana

mntiwana

таким образом, все в порядке. вы сделали изменения в порядке

 
mladen:
mntiwana таким образом все в порядке. вы сделали изменения OK

так что большое спасибо великому боссу за поощрение любознательного студента.

мои наилучшие пожелания

 
Jovager:
Младен,

Пожалуйста, подскажите мне причину, почему эта ea не работает.

//----------------------- EA ПАРАМЕТР

внешняя строка

Expert_Name = "---------- Pending Order EA v1",

Expert_Name2 = "---------- Для текущей цены установите EntryLevel = 0";

extern double

EntryLevel = 1.8600,

Distance = 100,

StopLoss = 50,

TakeProfit = 50,

TrailingStop = 50;

внешняя строка

Order_Setting = "---------- Order Setting";

extern int

NumberOfTries = 5,

Slippage = 5,

MagicNumber = 1234;

внешняя строка

MM_Parameters = "---------- Money Management";

extern double

Lots =0.01;

extern bool

MM = false, //Использовать управление капиталом или нет

AccountIsMicro = true; //Использовать микро-счет или нет

extern int

Risk = 0; //10%

строка extern

Testing_Parameters = "---------- Back Test Parameter";

extern bool

Show_Settings = true;

//----------------------- ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ

статическое значение int

TimeFrame = 0;

string

TicketComment = "PendingOrderEA v2",

LastTrade;

bool

TradeAllow = true,

EntryAllow = true;

//+------------------------------------------------------------------+

//| функция инициализации эксперта |

//+------------------------------------------------------------------+

int init()

{

//----------------------- ГЕНЕРИРУЕМ МАГИЧЕСКИЙ НОМЕР И КОММЕНТАРИЙ К БИЛЕТУ

//----------------------- ИСТОЧНИК : PENGIE

MagicNumber = subGenerateMagicNumber(MagicNumber, Symbol(), Period());

TicketComment = StringConcatenate(TicketComment, "-", Symbol(), "-", Period());

//----------------------- ОТОБРАЖЕНИЕ НАСТРОЕК EA НА ГРАФИКЕ

//----------------------- ИСТОЧНИК : CODERSGURU

if(Show_Settings) subPrintDetails();

else Comment("");

return(0);

}

//+------------------------------------------------------------------+

//| функция деинициализации эксперта | |

//+------------------------------------------------------------------+

int deinit()

{

//----------------------- ПРЕДОТВРАЩАЕТ ПОВТОРНЫЙ ПОДСЧЕТ ПРИ ИЗМЕНЕНИИ ПОЛЬЗОВАТЕЛЕМ ВРЕМЕННОГО ИНТЕРВАЛА

//----------------------- ИСТОЧНИК : CODERSGURU

TimeFrame=Period();

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

double

// BuyLevel,

SellLevel;

int

cnt,

билет,

total;

//----------------------- УСТАНОВИТЬ ЦЕНУ ПОКУПКИ И ПРОДАЖИ

if(EntryLevel==0) EntryLevel = Bid;

// BuyLevel = EntryLevel + Distance*Point;

SellLevel = EntryLevel - Distance*Point;

// if((BuyLevel-Ask)<10*Point || (Bid-SellLevel)<10*Point)

// {

// Comment("Invalid Entry Price or Distance");

// return(0);

// }

//----------------------- СКОРРЕКТИРУЙТЕ ЛОТЫ, ЕСЛИ ИСПОЛЬЗУЕТЕ УПРАВЛЕНИЕ КАПИТАЛОМ

if(MM) Lots = subLotSize();

//----------------------- ENTRY

//----------------------- ОБЩИЙ ОРДЕР НА ОСНОВЕ MAGICNUMBER И СИМВОЛА

total = subTotalTrade();

//----------------------- УСТАНОВИТЕ ОРДЕР ТОЛЬКО 1 РАЗ

if(TradeAllow)

{

//----------------------- ЕСЛИ НЕТ ТОРГОВЛИ

if(total<1 && EntryAllow)

{

ticket = OrderSend(Symbol(),OP_SELLSTOP,Lots,SellLevel,Slippage,SellLevel+StopLoss*Point,SellLevel-TakeProfit*Point,TicketComment,MagicNumber,0,Red);

// ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyLevel,Slippage,BuyLevel-StopLoss*Point,BuyLevel+TakeProfit*Point,TicketComment,MagicNumber,0,Green);

EntryAllow = false;

return(0);

}

if(total==1)

{

subDeleteOrder();

TradeAllow = false;

}

}

//----------------------- СЕКЦИЯ ТРЕЙЛИНГ-СТОПА

if(TrailingStop>0 && subTotalTrade()>0)

{

total = OrdersTotal();

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL &&

OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber)

{

subTrailingStop(OrderType());

return(0);

}

}

}

return(0);

}

//----------------------- END PROGRAM

//+------------------------------------------------------------------+

//| ОПРЕДЕЛЕНИЯ ФУНКЦИЙ

//+------------------------------------------------------------------+

//----------------------- ФУНКЦИЯ УПРАВЛЕНИЯ ДЕНЬГАМИ

//----------------------- ИСТОЧНИК : CODERSGURU

double subLotSize()

{

double lotMM = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;

if(AccountIsMicro==false) //нормальный счет

{

if(lotMM < 0.1) lotMM = Lots;

if((lotMM > 0.5) && (lotMM < 1)) lotMM = 0.5;

if(lotMM > 1.0) lotMM = MathCeil(lotMM);

if(lotMM > 100) lotMM = 100;

}

else //micro account

{

if(lotMM < 0.01) lotMM = Lots;

if(lotMM > 1.0) lotMM = MathCeil(lotMM);

if(lotMM > 100) lotMM = 100;

}

return (lotMM);

}

//----------------------- КОЛИЧЕСТВО ОРДЕРОВ НА ОСНОВЕ СИМВОЛА И ФУНКЦИИ MAGICNUMBER

int subTotalTrade()

{

int

cnt,

total = 0;

for(cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderType()<=OP_SELL &&

OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber) total++;

}

return(total);

}

//----------------------- ФУНКЦИЯ УДАЛЕНИЯ ЗАКАЗА

void subDeleteOrder()

{

int

cnt,

total = 0;

total = OrdersTotal();

for(cnt=total-1;cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber)

{

switch(OrderType())

{

// case OP_BUYLIMIT :

// case OP_BUYSTOP :

// case OP_SELLLIMIT:

// case OP_SELLSTOP :

OrderDelete(OrderTicket());

}

}

}

}

//----------------------- ФУНКЦИЯ ТРЕЙЛИНГ-СТОП

//----------------------- ИСТОЧНИК : CODERSGURU

//----------------------- МОДИФИЦИРОВАНО : FIREDAVE

void subTrailingStop(int Type)

{

if(Type==OP_BUY) // открыта позиция на покупку

{

if(Bid-OrderOpenPrice()>Point*TrailingStop &&

OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

if(Type==OP_SELL) // открыта позиция на продажу

{

if(OrderOpenPrice()-Ask>Point*TrailingStop)

{

if(OrderStopLoss()>Ask+Point*TrailingStop || OrderStopLoss()==0)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

//----------------------- ГЕНЕРИРУЕМ МАГИЧЕСКОЕ ЧИСЛО НА ОСНОВЕ СИМВОЛА И ВРЕМЕННОЙ ФУНКЦИИ

//----------------------- ИСТОЧНИК : PENGIE

//----------------------- МОДИФИЦИРОВАНО : FIREDAVE

int subGenerateMagicNumber(int MagicNumber, string symbol, int timeFrame)

{

int isymbol = 0;

if (symbol == "EURUSD") isymbol = 1;

else if (symbol == "GBPUSD") isymbol = 2;

else if (symbol == "USDJPY") isymbol = 3;

else if (symbol == "AUDCAD") isymbol = 4;

else if (symbol == "AUDUSD") isymbol = 5;

else if (symbol == "USDCAD") isymbol = 6;

else if (symbol == "EURGBP") isymbol = 7;

else if (symbol == "EURJPY") isymbol = 8;

else if (symbol == "EURCHF") isymbol = 9;

else if (symbol == "EURAUD") isymbol = 10;

else if (symbol == "EURCAD") isymbol = 11;

else if (symbol == "GBPUSD") isymbol = 12;

else if (symbol == "GBPJPY") isymbol = 13;

else if (symbol == "GBPCHF") isymbol = 14;

else if (symbol == "GBPAUD") isymbol = 15;

else if (symbol == "GBPCAD") isymbol = 16;

else isymbol = 17;

if(isymbol<10) MagicNumber = MagicNumber * 10;

return (StrToInteger(StringConcatenate(MagicNumber, isymbol, timeFrame)));

}

//----------------------- ФУНКЦИЯ ПЕЧАТИ КОММЕНТАРИЯ

//----------------------- ИСТОЧНИК : CODERSGURU

void subPrintDetails()

{

string sComment = "";

string sp = "----------------------------------------\n";

string NL = "\n";

sComment = sp;

sComment = sComment + "TakeProfit=" + DoubleToStr(TakeProfit,0) + " | ";

sComment = sComment + "TrailingStop=" + DoubleToStr(TrailingStop,0) + " | ";

sComment = sComment + "StopLoss=" + DoubleToStr(StopLoss,0) + NL;

sComment = sComment + sp;

sComment = sComment + "Lots=" + DoubleToStr(Lots,2) + " | ";

sComment = sComment + "MM=" + subBoolToStr(MM) + " | ";

sComment = sComment + "Risk=" + DoubleToStr(Risk,0) + "%" + NL;

sComment = sComment + sp;

Comment(sComment);

}

//----------------------- ПРЕОБРАЗОВАНИЕ BOOLEN ПЕРЕМЕННОЙ В СТРОКОВУЮ ФУНКЦИЮ.

//----------------------- ИСТОЧНИК : CODERSGURU

string subBoolToStr ( bool value)

{

if(value) return ("True");

else return ("False");

}

//----------------------- КОНЕЦ ФУНКЦИИ

Заранее спасибо.

Джо

Jo,

Не могли бы вы приложить файл mq4? Очень трудно протестировать его таким образом.