Если Вы хотите заказать советник или индикатор, то публикуйте в эту группу тех. задание. Если Ваш заказ не очень сложный, то велика вероятность, что Вам его смогут сделать даже бесплатно
Программистам MQL: подпишитесь на группу, чтобы получать уведомления о заказах.
// Закрытие по прибыли
if(AllProfit()>Profit && Profit>0)
CloseAll();
if(AllProfit(0)>Profit && Profit>0)
CloseAll(0);
if(AllProfit(1)>Profit && Profit>0)
CloseAll(1);
// Новая свеча
if(t!=iTime(NULL,0,0))
{
// === ПРОВЕРКА: открываем ТОЛЬКО если нет открытых позиций ===
if(!HasOpenPositions())
{
// Сигнал на покупку (медвежьи свечи на обоих инструментах)
if(Buy && iClose(Symb1,0,1)<iOpen(Symb1,0,1) && iClose(Symb2,0,1)<iOpen(Symb2,0,1))
{
trade.Buy(Lot,Symb1,ask1,0,0,«Multik_Buy»);
trade.Buy(Lot,Symb2,ask2,0,0,«Multik_Buy»);
Print(«Открыты покупки по »,Symb1," и ",Symb2);
}
// Сигнал на продажу (бычьи свечи на обоих инструментах)
if(Sell && iClose(Symb1,0,1)>iOpen(Symb1,0,1) && iClose(Symb2,0,1)>iOpen(Symb2,0,1))
{
trade.Sell(Lot,Symb1,bid1,0,0,«Multik_Sell»);
trade.Sell(Lot,Symb2,bid2,0,0,«Multik_Sell»);
Print(«Открыты продажи по »,Symb1," и ",Symb2);
}
}
else
{
Print(«Есть открытые позиции, новые не открываем»);
}
// =========================================================
t=iTime(NULL,0,0);
}
Comment("\n ====== Multik v1.00 ======",
"\n Общая прибыль: ",DoubleToString(AllProfit(),2),
"\n Прибыль по покупкам: ",DoubleToString(AllProfit(0),2),
"\n Прибыль по продажам: ",DoubleToString(AllProfit(1),2),
"\n -------------------------",
"\n ",Symb1," Close[1]: ",DoubleToString(iClose(Symb1,0,1),5),
"\n ",Symb1," Open[1]: ",DoubleToString(iOpen(Symb1,0,1),5),
"\n -------------------------",
"\n ",Symb2," Close[1]: ",DoubleToString(iClose(Symb2,0,1),5),
"\n ",Symb2," Open[1]: ",DoubleToString(iOpen(Symb2,0,1),5),
"\n -------------------------",
"\n Открытых позиций: ",PositionsTotal(),
"\n Есть позиции по символам: ",HasOpenPositions()? «ДА»: «НЕТ»);
}
//+------------------------------------------------------------------+
Этот советник задуман как эксперт для торговли коррелирующими между собой валютами,
поэтому открывает сразу две сделки по указанным валютам, а дальше если совокупный профит достигнет указанного профита закроет сразу обе сделки по обеим валютам
Комментарии (18)
25 igrun Сообщений: 1865 - igrun
25 igrun Сообщений: 1865 - igrun
//| Multik.mq5 |
//| Copyright 2024, AM2. |
//| www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright «Copyright 2024, AM2.»
#property link «www.forexsystems.biz»
#property version «1.00»
#include <Trade\Trade.mqh> // Подключаем торговый класс CTrade
CTrade trade; // Используем торговый класс CTrade
//--- входные параметры группы 1
input double Lot = 0.3; // лот
input double Profit = 11; // Профит в валюте
input string Symb1 = «EURUSD»; // 1-й символ
input string Symb2 = «GBPUSD»; // 2-й символ
input int Slip = 30; // Проскальзывание
input bool Buy = 1; // покупки
input bool Sell = 1; // продажи
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
if(Buy==false && Sell==false)
{
Print(«Ошибка: Запрещены и покупки, и продажи!»);
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll(int type=-1)
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetInteger(POSITION_TYPE)==0 && type==0)
{
trade.PositionClose(PositionGetTicket(i),Slip);
}
if(PositionGetInteger(POSITION_TYPE)==1 && type==1)
{
trade.PositionClose(PositionGetTicket(i),Slip);
}
if(type==-1)
{
trade.PositionClose(PositionGetTicket(i),Slip);
}
}
}
}
//+------------------------------------------------------------------+
//| Position Profit |
//+------------------------------------------------------------------+
double AllProfit(int type=-1)
{
double p=0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetInteger(POSITION_TYPE)==0 && type==0)
{
p+=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
}
if(PositionGetInteger(POSITION_TYPE)==1 && type==1)
{
p+=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
}
if(type==-1)
{
p+=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
}
}
}
return(p);
}
//+------------------------------------------------------------------+
//| Функция проверки, есть ли открытые позиции по нашим символам |
//+------------------------------------------------------------------+
bool HasOpenPositions()
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
string symbol = PositionGetString(POSITION_SYMBOL);
if(symbol == Symb1 || symbol == Symb2)
{
return true; // Нашли открытую позицию
}
}
}
return false; // Нет открытых позиций
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double ask1=SymbolInfoDouble(Symb1,SYMBOL_ASK);
double bid1=SymbolInfoDouble(Symb1,SYMBOL_BID);
double ask2=SymbolInfoDouble(Symb2,SYMBOL_ASK);
double bid2=SymbolInfoDouble(Symb2,SYMBOL_BID);
// Закрытие по прибыли
if(AllProfit()>Profit && Profit>0)
CloseAll();
if(AllProfit(0)>Profit && Profit>0)
CloseAll(0);
if(AllProfit(1)>Profit && Profit>0)
CloseAll(1);
// Новая свеча
if(t!=iTime(NULL,0,0))
{
// === ПРОВЕРКА: открываем ТОЛЬКО если нет открытых позиций ===
if(!HasOpenPositions())
{
// Сигнал на покупку (медвежьи свечи на обоих инструментах)
if(Buy && iClose(Symb1,0,1)<iOpen(Symb1,0,1) && iClose(Symb2,0,1)<iOpen(Symb2,0,1))
{
trade.Buy(Lot,Symb1,ask1,0,0,«Multik_Buy»);
trade.Buy(Lot,Symb2,ask2,0,0,«Multik_Buy»);
Print(«Открыты покупки по »,Symb1," и ",Symb2);
}
// Сигнал на продажу (бычьи свечи на обоих инструментах)
if(Sell && iClose(Symb1,0,1)>iOpen(Symb1,0,1) && iClose(Symb2,0,1)>iOpen(Symb2,0,1))
{
trade.Sell(Lot,Symb1,bid1,0,0,«Multik_Sell»);
trade.Sell(Lot,Symb2,bid2,0,0,«Multik_Sell»);
Print(«Открыты продажи по »,Symb1," и ",Symb2);
}
}
else
{
Print(«Есть открытые позиции, новые не открываем»);
}
// =========================================================
t=iTime(NULL,0,0);
}
Comment("\n ====== Multik v1.00 ======",
"\n Общая прибыль: ",DoubleToString(AllProfit(),2),
"\n Прибыль по покупкам: ",DoubleToString(AllProfit(0),2),
"\n Прибыль по продажам: ",DoubleToString(AllProfit(1),2),
"\n -------------------------",
"\n ",Symb1," Close[1]: ",DoubleToString(iClose(Symb1,0,1),5),
"\n ",Symb1," Open[1]: ",DoubleToString(iOpen(Symb1,0,1),5),
"\n -------------------------",
"\n ",Symb2," Close[1]: ",DoubleToString(iClose(Symb2,0,1),5),
"\n ",Symb2," Open[1]: ",DoubleToString(iOpen(Symb2,0,1),5),
"\n -------------------------",
"\n Открытых позиций: ",PositionsTotal(),
"\n Есть позиции по символам: ",HasOpenPositions()? «ДА»: «НЕТ»);
}
//+------------------------------------------------------------------+
25 igrun Сообщений: 1865 - igrun
25 igrun Сообщений: 1865 - igrun
8 AVPetrovich Автор Сообщений: 211
25 igrun Сообщений: 1865 - igrun
поэтому открывает сразу две сделки по указанным валютам, а дальше если совокупный профит достигнет указанного профита закроет сразу обе сделки по обеим валютам
21 alex30774 Сообщений: 817
8 AVPetrovich Автор Сообщений: 211
25 igrun Сообщений: 1865 - igrun
8 AVPetrovich Автор Сообщений: 211
25 igrun Сообщений: 1865 - igrun
8 AVPetrovich Автор Сообщений: 211
25 igrun Сообщений: 1865 - igrun
Да?
Так кто ни будь возьмётся? Редактирован: 27 апреля 2026, 22:28
8 AVPetrovich Автор Сообщений: 211
25 igrun Сообщений: 1865 - igrun
Раньше не верил в Яндекс. Загрузил все в Алису. Работает как доктор прописал.
8 AVPetrovich Автор Сообщений: 211
25 igrun Сообщений: 1865 - igrun
25 igrun Сообщений: 1865 - igrun
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий