Pioner
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «pioner_v2.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Pioner — торговый советник для MetaTrader 4, реализующий мультистратегический подход к торговле на одном инструменте. Эксперт одновременно управляет несколькими типами позиций и отложенных ордеров, переключаясь между различными режимами работы в зависимости от текущей ситуации на рынке.
Советник использует систему хранения состояния через глобальные переменные платформы, что позволяет сохранять контекст между перезапусками и корректно обрабатывать рыночные условия. Доступны режимы принудительного закрытия всех позиций и полной остановки работы.
Внутренняя логика включает расчёт объёмов на основе баланса счёта или фиксированного значения, а также управление сеткой ордеров с заданными уровнями стоп-лосса. Все торговые операции выполняются через стандартные API MetaTrader 4 с контролем проскальзывания.
Настройки программы
| Настройка | Описание |
|---|---|
| Lots | Lots — Размер лота для торговых операций. |
| Grid | Grid — Шаг сетки ордеров в пунктах. |
| StopLoss | StopLoss — Уровень стоп-лосса в пунктах. |
| FixedLot | FixedLot — Переключатель фиксированного размера лота. При значении true используется параметр Lots, при false — расчёт на основе баланса счёта. |
| Slippage | Slippage — Допустимое проскальзывание в пунктах. |
| Magic | Magic — Магический номер для идентификации ордеров советника. |
| StopOnRoll | StopOnRoll — Переключатель автоматического закрытия всех позиций при определённых условиях. |
| StopAll | StopAll — Переключатель полной остановки работы советника с закрытием всех позиций. |
Поиск по коду файла
#include <stdlib.mqh>
extern double Lots = 0.1;
extern int Grid = 20;
extern int StopLoss = 200;
extern bool FixedLot = true;
extern double Slippage = 3;
extern int Magic = 110705;
extern bool StopOnRoll = false;
extern bool StopAll = false;
int BuyCnt = 0;
int SellCnt = 0;
int BuyLimitCnt = 0;
int SellLimitCnt = 0;
int BuyStopCnt = 0;
int SellStopCnt = 0;
int Step = 0;
#define STATE_0 0
#define STEP_UP 1
#define STEP_DOWN 2
#define ROLL_UP 3
#define ROLL_DOWN 4
string gVarName = "Pioner_PrevState";
int PrevState = STATE_0;
int init() {
// код доступен только после оплаты
}
int deinit() {
return(0);
}
int start() {
// код доступен только после оплаты
}
int OrderSelectByType(int type, int ind) {
int cnt = OrdersTotal();
int ind0 = 0;
for (int i=0; i < cnt; i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
if (OrderType() == type) ind0++;
if (ind == ind0) return (OrderTicket());
}
return(-1);
}
int Buy(double lot, double price, double SL, double TP, string comment) {
bool res = 0;
while (res<=0) {
RefreshRates();
res = OrderSend(Symbol(), OP_BUY, lot, price, Slippage, SL, TP, comment, Magic);
if (res < 0) {
Print("Error opening BUY order: ", ErrorDescription(GetLastError()));
Sleep(6000);
}
}
Sleep(2000);
return(0);
}
int Sell(double lot, double price, double SL, double TP, string comment) {
bool res = 0;
while (res<=0) {
RefreshRates();
res = OrderSend(Symbol(), OP_SELL, lot, price, Slippage, SL, TP, comment, Magic);
if (res < 0) {
Print("Error opening SELL order: ", ErrorDescription(GetLastError()));
Sleep(6000);
}
}
Sleep(2000);
return(0);
}
int SetBuyStop(double lot, double price, double SL, double TP, string comment) {
bool res = 0;
while (res<=0) {
RefreshRates();
res = OrderSend(Symbol(), OP_BUYSTOP, lot, price, Slippage, SL, TP, comment, Magic);
if (res < 0) {
Print("Error setting BUYSTOP order: ", ErrorDescription(GetLastError()));
Sleep(6000);
}
}
Sleep(2000);
return(0);
}
int SetSellStop(double lot, double price, double SL, double TP, string comment) {
bool res = 0;
while (res<=0) {
RefreshRates();
res = OrderSend(Symbol(), OP_SELLSTOP, lot, price, Slippage, SL, TP, comment, Magic);
if (res < 0) {
Print("Error setting SELLSTOP order: ", ErrorDescription(GetLastError()));
Sleep(6000);
}
}
Sleep(2000);
return(0);
}
int SetBuyLimit(double lot, double price, double SL, double TP, string comment) {
bool res = 0;
while (res<=0) {
RefreshRates();
res = OrderSend(Symbol(), OP_BUYLIMIT, lot, price, Slippage, SL, TP, comment, Magic);
if (res < 0) {
Print("Error setting BUYLIMIT order: ", ErrorDescription(GetLastError()));
Sleep(6000);
}
}
Sleep(2000);
return(0);
}
int SetSellLimit(double lot, double price, double SL, double TP, string comment) {
bool res = 0;
while (res<=0) {
RefreshRates();
res = OrderSend(Symbol(), OP_SELLLIMIT, lot, price, Slippage, SL, TP, comment, Magic);
if (res < 0) {
Print("Error setting SELLLIMIT order: ", ErrorDescription(GetLastError()));
Sleep(6000);
}
}
Sleep(2000);
return(0);
}
int CloseOrder(int ticket, double lot, double price) {
bool res = 0;
while (res<=0) {
RefreshRates();
res = OrderClose(ticket, lot, price, Slippage);
if (!res) {
Print("Error closing order: ", ErrorDescription(GetLastError()));
Sleep(6000);
}
}
Sleep(2000);
return(0);
}
int DeleteOrder(int ticket) {
bool res = 0;
while (res<=0) {
RefreshRates();
res = OrderDelete(ticket);
if (!res) {
Print("Error deleting order: ", ErrorDescrПоказано первые 50% кода (символов: 9159)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.