Андрей, пытался сделать мультивалютник как ты делал в заказе:
zakaz.opentraders.ru/63287.html не получилось, в тестере показывает только одну пару и тестируется только при trade.PositionOpen, для OpenSell OpenBuy пишет ошибку "[Invalid request]", также не получается заставить работать один ордер раз в день и добавить любое условие для входа, можно для индикатора МА, добавить простой трал. Посмотри пожалуйста если будет время, за ранее спасибо.
//+------------------------------------------------------------------+
//| ZeroPoint.mq5 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.02"
#include <Trade\Trade.mqh> // Подключаем торговый класс CTrade
//--- входные параметры эксперта
input int TakeProfit = 500; // Тейкпрофит
input int StopLoss = 500; // Стоплосс
input int Slip = 50; // Проскальзывание
input double Lot = 0.01; // Количество лотов для торговли
input long Magic = 123; // Магик
input string Symbols = "EURUSD,GBPUSD";
CTrade trade; // Используем торговый класс CTrade
long m=0;
string symbols[4];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Array();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
void Array()
{
symbols[0]=StringSubstr(Symbols,0,6);
for(int i=0; i<4; i++)
{
symbols[i]=StringSubstr(Symbols,i*(6+1),6);
}
}
//+------------------------------------------------------------------+
//| 1 сделка в день |
//+------------------------------------------------------------------+
bool DayDeal(string symb)
{
if(HistorySelect(0,TimeCurrent()))
{
if(PositionGetString(POSITION_SYMBOL)==symb)
{
datetime t=(datetime)HistoryDealGetInteger(HistoryDealGetTicket(HistoryDealsTotal()-1),DEAL_TIME);
if(TimeCurrent()-t<24*3600)
{
return(false);
}
}
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OpenBuy(string symb)
{
// Лучшее предложение на покупку
double Ask=SymbolInfoDouble(symb,SYMBOL_ASK);
// Лучшее предложение на продажу
double Bid=SymbolInfoDouble(symb,SYMBOL_BID);
//--- готовим запрос
MqlTradeRequest request;
request.action = TRADE_ACTION_DEAL; // немедленное исполнение
request.price = NormalizeDouble(Ask,_Digits); // последняя цена ask
request.sl = NormalizeDouble(Ask - StopLoss*_Point,_Digits); // Stop Loss
request.tp = NormalizeDouble(Ask + TakeProfit*_Point,_Digits); // Take Profit
request.symbol= symb; // символ
request.volume = Lot; // количество лотов для торговли
request.magic = Magic; // Magic Number
request.type = ORDER_TYPE_BUY; // ордер на покупку
request.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
request.deviation=Slip; // проскальзывание от текущей цены
//--- отправим торговый приказ
MqlTradeResult result={0};
if(OrderSend(request,result))
//--- выведем в лог ответ сервера
Print(__FUNCTION__,":",result.comment);
if(result.retcode==10016) Print(result.bid,result.ask,result.price);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OpenSell(string symb)
{
// Лучшее предложение на покупку
double Ask=SymbolInfoDouble(symb,SYMBOL_ASK);
// Лучшее предложение на продажу
double Bid=SymbolInfoDouble(symb,SYMBOL_BID);
//--- готовим запрос
MqlTradeRequest request;
request.action = TRADE_ACTION_DEAL; // немедленное исполнение
request.price = NormalizeDouble(Bid,_Digits); // последняя цена ask
request.sl = NormalizeDouble(Bid + StopLoss*_Point,_Digits); // Stop Loss
request.tp = NormalizeDouble(Bid - TakeProfit*_Point,_Digits); // Take Profit
request.symbol= symb; // символ
request.volume = Lot; // количество лотов для торговли
request.magic = Magic; // Magic Number
request.type = ORDER_TYPE_SELL; // ордер на продажу
request.deviation=Slip; // проскальзывание от текущей цены
//--- отправим торговый приказ
MqlTradeResult result={0};
if(OrderSend(request,result))
//--- выведем в лог ответ сервера
Print(__FUNCTION__,":",result.comment);
if(result.retcode==10016) Print(result.bid,result.ask,result.price);
{
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OpenPos(string symb)
{
// Лучшее предложение на покупку
double Ask=SymbolInfoDouble(symb,SYMBOL_ASK);
// Лучшее предложение на продажу
double Bid=SymbolInfoDouble(symb,SYMBOL_BID);
//--- Стопы
double stop=0,take=0;
//--- Buy
if(PositionsTotal()<1 && DayDeal(symb))
{
//--- Вычисляем стопы
if(StopLoss>0) stop=Ask-StopLoss*_Point;
if(TakeProfit>0) take=Ask+TakeProfit*_Point;
//--- Открываем ордер на покупку
// trade.PositionOpen(symb,ORDER_TYPE_BUY,Lot,NormalizeDouble(Ask,_Digits),NormalizeDouble(stop,_Digits),NormalizeDouble(take,_Digits));
OpenBuy(symb);
}
//--- Sell
if(PositionsTotal()<1 && DayDeal(symb))
{
//--- Вычисляем стопы
if(StopLoss>0) stop=Bid+StopLoss*_Point;
if(TakeProfit>0) take=Bid-TakeProfit*_Point;
//--- Открываем ордер на продажу
// trade.PositionOpen(symb,ORDER_TYPE_SELL,Lot,NormalizeDouble(Bid,_Digits),NormalizeDouble(stop,_Digits),NormalizeDouble(take,_Digits));
OpenSell(symb);
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0; i<ArraySize(symbols); i++)
{
if(symbols[i]!="")
{
OpenPos(symbols[i]);
}
}
Comment("\n Pos: ",PositionsTotal(),
"\n Symb: ",PositionGetSymbol(0),
"\n Magic: ",m);
}
//+------------------------------------------------------------------+
Комментарии (9)
35 AM2 Сообщений: 16285 - Андрей
12 vypchela Автор Сообщений: 112
35 AM2 Сообщений: 16285 - Андрей
input string Symbols = «EURUSD,GBPUSD»;
а то не очень удобно, что при добавлении пары править код.
12 vypchela Автор Сообщений: 112
35 AM2 Сообщений: 16285 - Андрей
12 vypchela Автор Сообщений: 112
35 AM2 Сообщений: 16285 - Андрей
35 AM2 Сообщений: 16285 - Андрей
12 vypchela Автор Сообщений: 112
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий