extern string _P_Expert = "---------- Параметры советника";
extern bool CurSymbolOnly = True; // Только текущий символ
extern int TakeProfit = 10; // Тейк
extern bool ShowComment = True; // Показывать комментарий
extern int NumberAccount = 0; // Номер торгового счёта
extern bool UseSound = False; // Использовать звуковой сигнал
extern string NameFileSound = "expert.wav"; // Наименование звукового файла
extern int Slippage = 3; // Проскальзывание цены
extern int NumberOfTry = 5; // Количество попыток
extern int PauseAfterError = 75; // Пауза после ошибки в секундах
extern int Lot=1;
//------- Глобальные переменные советника --------------------------------------
color clCloseBuy = Blue; // Цвет значка закрытия покупки
color clCloseSell = Red; // Цвет значка закрытия продажи
int CurProfit;
int slippage=5;
//------- Поключение внешних модулей -------------------------------------------
#include <stdlib.mqh>
#include <WinUser32.mqh>
//+----------------------------------------------------------------------------+
//| expert initialization function |
//+----------------------------------------------------------------------------+
void init() { if (!IsTesting()) Comment(""); }
//+----------------------------------------------------------------------------+
//| expert deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() { if (!IsTesting()) Comment(""); }
//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void start() {
{
double Free =AccountFreeMargin();
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double price;
int total=OrdersTotal();
if (total==0)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,0,0,CLR_NONE);
OrderSend(Symbol(),OP_BUY,Lot*2,Ask,3,0,0,0,0,CLR_NONE);
}
if (CurProfit>TakeProfit)
{
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUY) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage,CLR_NONE);
}
for (int j=OrdersTotal()-1; j>=0; j--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage,CLR_NONE);
}
}
}
if (TakeProfit>0) CloseByProfit();
if (ShowComment) {
Comment("Текущий профит=",CurProfit," п."," Профит закрытия=",TakeProfit," п.");
}
}
//+----------------------------------------------------------------------------+
//| Определение общего профита. |
//+----------------------------------------------------------------------------+
void CloseByProfit() {
double p;
int i, k=OrdersTotal(), pr=0;
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (!CurSymbolOnly || OrderSymbol()==Symbol()) {
p=MarketInfo(OrderSymbol(), MODE_POINT);
if (p==0) if (StringFind(OrderSymbol(), "JPY")<0) p=0.0001; else p=0.01;
if (OrderType()==OP_BUY) {
pr+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p, 0);
}
if (OrderType()==OP_SELL) {
pr+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p, 0);
}
}
}
}
CurProfit=pr;
}
//+----------------------------------------------------------------------------+
//| Вывод сообщения в коммент и в журнал |
//+----------------------------------------------------------------------------+
void Message(string m) {
Comment(m);
if (StringLen(m)>0) Print(m);
}