calm pips.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «calm pips.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Calm Pips — советник для MetaTrader 4, который использует сигналы индикатора RSI в сочетании с расчётом шага на основе ATR для управления серией ордеров. При достижении определённых условий по прибыли советник увеличивает лот в серии с заданным множителем и открывает дополнительные позиции.
Советник отображает на графике панель статистики с информацией о балансе, эквити, просадке и прибыли за различные периоды. Также поддерживается система лицензирования через файлы и демонстрационный режим работы.
Обработка рыночных и торговых событий реализована через стандартные обработчики OnTick, OnInit и OnDeinit. Торговые операции выполняются с использованием встроенных торговых API MetaTrader 4.
Настройки программы
| Настройка | Описание |
|---|---|
| DryUse | Сухой режим — при включении отключает отправку новых ордеров |
| Lots | Начальный лот для открытия первой позиции |
| LotExponent | Множитель для расчёта увеличения лота в серии ордеров |
| StepPeriod | Период индикатора ATR, используемый для расчёта шага |
| StepDel | Делитель для расчёта шага на основе значения ATR |
| StepMin | Минимальное допустимое значение шага |
| StepPlusOrder | Номер ордера в серии, начиная с которого добавляется дополнительный шаг |
| StepPlusValue | Дополнительное значение шага, добавляемое после порога StepPlusOrder |
| slippage | Допустимое проскальзывание в пунктах (0 — автоматическое) |
| TakeProfit | Средний тейк-профит, устанавливаемый для серии ордеров |
| RsiMinimum | Нижний порог RSI — уровень перепроданности |
| RsiMaximum | Верхний порог RSI — уровень перекупленности |
| MaxTrades | Максимальное количество ордеров в серии |
| StartProfit | Минимальная прибыль одного ордера для закрытия всей серии |
| Magic | Магический номер для идентификации ордеров советника |
| tf | Рабочий таймфрейм для анализа и торговли |
| SizeFont | Размер шрифта на панели статистики графика |
Поиск по коду файла
#property version "1.00"
#property strict
#define LOGO_XY 100
#define POINTS_NEW
#include <sovetnikovGUI\Orders.mqh>
#include <sovetnikovGUI\Time.mqh>
#include <Charts\Chart.mqh>
#define LICENSE_NAME "b!9dcp6yw{:3_jmkis8+f9h2j:vb<%:/"
#define LICENSE_FILE "spmcb"
#define VALID_KEY "Советник активен"
#define EMPTY_KEY "Необходимо активировать советник."
#define INVALID_KEY "Неверная лицензия."
#define EXPERIED "Лицензия истекла "
/*
в панели
Statistics: Balance; Equity; Drawdown; Прирост сегодня, Прирост на
этой неделе, Прирост в этом месяце, Прирост в этом году (на
английский правильно сами переведите). Суммарный лот,
Количество открытых сделок.
*/
B DryUse=false; //Сушка
D Lots=0.06;//Начальный лот
D LotExponent=1.2; //Множитель лота
I StepPeriod=24;//Период автошага
I StepDel=2;//Делитель для автошага
I StepMin=25;//Минимальный шаг
I StepPlusOrder=3;//С указанного шага увеличивать шаг
I StepPlusValue=15;//Дополнительный шаг
I slippage=0;//Допустимое проскальзывание (0 - авто)
D TakeProfit=15;//Тейк профит серии
I RsiMinimum=30;//RSI Перепроданность
I RsiMaximum=70;//RSI Перекупленность
I MaxTrades=15;//Максимальное количество ордеров в серии
D StartProfit=1;//Минимальный профит для одного ордера
#ifndef LICENSE_DEMO
I Magic=20200908;//Идентификатор ордеров
#else
int Magic=20200908; //скроем
#endif
TF tf=PERIOD_CURRENT;//Рабочий период
C ColorText=clrWhite; //Цвет текста
C ColorBackground=clrBlack; //Цвет заднего фона
I SizeFont=12; //Размер шрифта
string cmt="";
class CMyOrders: public COrders
{
public:
};
class CMain: public CMainDefault
{
protected:
CMyOrders m_main;
CNewBar m_bar;
CDrawPos m_pos;
CChart m_chart;
public:
virtual int OnInit()
{
// код доступен только после оплаты
}
virtual void OnDeinit(const int reason)
{
HideTestIndicators(false);
m_chart.Detach();
m_main.OnDeinit();
m_pos.OnDeinit();
}
virtual void OnTick()
{
// код доступен только после оплаты
}
string sLicense=VALID_KEY;
bool bcheck=checkAccount(sLicense,LICENSE_NAME);
m_pos.DrawStatus("status",sLicense,bcheck);
if(AccountBalance()==0)
return;
/*Statistics: Balance; Equity; Drawdown; Прирост сегодня, Прирост на
этой неделе, Прирост в этом месяце, Прирост в этом году (на
английский правильно сами переведите). Суммарный лот,
Количество открытых сделок.*/
m_main.Update(); //получим кол-во ордеров в структуре orders
double dday,dweek,dmonth,dyear;
GetProfitAll(_Symbol,Magic,dday,dweek,dmonth,dyear);
double dd=m_main.getProfit(ALL);
int ix=5,iy=20;
string sval=GetAccountCurrency();
double dlots[2];
m_main.get_lots(dlots);
string stext=StringFormat("Баланс: %.2f %s\nЭквити: %.2f %s\nПросадка: %.2f %%\nBuy ордеров: %d\nSell ордеров: %d\nОбъем buy: %.2f\nОбъем sell: %.2f\n\nПрибыль:\nДень: %.2f %s\nНеделя: %.2f %s\nМесяц: %.2f %s\nГод: %.2f %s",
AccountBalance(),sval,AccountEquity(),sval,NormalizeDouble(dd*100/AccountBalance(),2),m_main.orders[OP_BUY],m_main.orders[OP_SELL],dlots[0],dlots[1],dday,sval,dweek,sval,dmonth,sval,dyear,sval);
m_pos.Comment(0,"right",stext,ix,iy,100,CORNER_RIGHT_UPPER,ColorText,ColorBackground,SizeFont);
if(!m_main.IsWork())
return; //отключена торговля
if(StepDel<=0.0)
return;
m_bar.Refresh();
m_main.OnTick();
int op=-1;
op=signal();
double datrD1=ND1((iATR(_Symbol,PERIOD_D1,StepPeriod,1)/m_main.p)/StepDel);
double datr=ND1((iATR(_Symbol,tf,StepPeriod,0)/m_main.p)/StepDel);
double dstep=NormalizeDouble(datr/StepDel,1);
if(dstep>datrD1)
dstep=datrD1;
if(dstep<StepMin)
dstep=StepMin;
if(StartProfit!=0.0 && (m_main.orders[OP_BUY]==0 || m_main.orders[OP_SELL]==0) && m_main.m_all==1)
{
double dprofit=m_main.getProfit(ALL);
if(dprofit>=StartProfit)
{
m_main.OrderCloseAll(ALL);
return;
}
}
double abuy[][2],asell[][2];
m_main.getLastOrderTicket(abuy,asell);
int ib=ArrayRange(abuy,0);
int is=ArrayRange(asell,0);
long tt=0;
double dRSI1=iRSI(_Symbol,tf,14,PRICE_CLOSE,1);
double dRSI2=iRSI(_Symbol,tf,14,PRICE_CLOSE,2);
if(ib>0 && ib<MaxTrades && m_bar.isNewBar() && dRSI2<=RsiMinimum && dRSI1>RsiMinimum)
{
ArraySort(abuy,WHOLE_ARRAY,0,MODE_ASCEND);//самый нижний это последний в массиве
long tlast=(long)abuy[0][1];
double dnextstep=dstep;
if(ib>=StepPlusOrder)
{
dnextstep+=StepPlusValue*(ib-StepPlusOrder+1);
}
if(m_main.OrderSelect(tlast))
{
double dpt=m_main.OrderProfitPoint();
if(dpt<=-dnextstep)
{
double dnextlot=NLot(MathPow(LotExponent,ib)*Lots);
tt=m_main.OrderSend(OP_BUY,dnextlot,-1,0,0,cmt);
DEBUG_OrderSend(tt);
ib++;
}
}
}
if(ib>1)
{
bool bModify=(m_main.IsNewDay() || tt>0);
m_maПоказано первые 50% кода (символов: 8110)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.