Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 938
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Такой вопрос: я хочу создать одномерный массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться datetame, с 10 по 14 будет храниться int. Возможно ли организовать такое в mql4, если да покажите как, я видел пример со структурами но это было в с++ но я потерял ссылку на сайт?
Если у Вас для каждого типа отведены определённые ячейки массива, то сделайте вместо массива структуру.
Если у Вас для каждого типа отведены определённые ячейки массива, то сделайте вместо массива структуру.
к сожалению он даже формализовать задачу не может
с одной стороны общение выглядит, что он хочет уйти от строгой типизации в С++ / MQL , вот хороший топик с обсуждением, хотя сомневаюсь, что ему это поможет https://www.mql5.com/ru/forum/294094
в ходе обсуждения (по моему уже месяца 3 продолжается? ) постоянно выясняется, что @Seric29 нужно еще уйти и от описания сигнатуры функций и получить некую функцию "фантом" в который можно передавать произвольное количество параметров
потом в ходе обсуждения выясняется, что во всем этом должны участвовать многомерные динамические массивы, причем эти массивы должные быть переданы в функцию в качестве параметров
т.е. тут вообще не формализованная задача, решение которой постоянно заканчивается "выкриками с места", разработчики урезали функционал чего то и дайте мне исходные коды то операторов цикла, я их переделаю, то вот последнее:
Как написать письмо разработчикам mql4 как увидеть код компилятора, можно ли в него внести дополнительные возможности чтобы он не был таким статическим?
... в общем как то так... фраза "вынос мозга" это самое малое, что можно сказать ))))
Поэтому и не даю никаких подробностей.
От изучения основ ни куда не убежишь.
От изучения основ ни куда не убежишь.
тут интересно что человек не учит основы, а пытается показать что он это всё уже знает, а вы все метаквоты мешают ему делать работу)
тут интересно что человек не учит основы, а пытается показать что он это всё уже знает, а вы все метаквоты мешают ему делать работу)
Приветствую. Посмотрел грамотный ролик "Из MQL4 в MQL5 - как переписать советник под Metatrader 5".
Большой респект автору. Решил сам попробовать. Написал. Идея такая :
1. В инпутах устанавливаю dtriger = 1 - открывается Buy.
2. В инпутах устанавливаю dtriger = -1 - открывается Sell.
3. В инпутах устанавливаю dtriger = 0 - закрываются все открытые.
Читал в хелпах, что в MT5 не возможно держать встречные позичии,
а у меня они присуствуют.
Вопрос : как корректно прописать закрытие действующей позиции при
открытии стречной (переворотной).
Премного благодарен.
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo o_position;
CTrade o_trade;
CSymbolInfo o_symbol;
COrderInfo o_order;
input int triger = 0;
input double StartLot = 0.01;
input double lpos_volume = 1.0;
input int Step = 10;
input int MagicNumber = 12345; // Magic nuaber
input int Slippage = 30; // slippage
int dtriger;
int dStep;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
dStep = Step ;
dtriger = triger ;
if (!o_symbol.Name(Symbol()))
return(INIT_FAILED);
RefreshRates();
o_trade.SetExpertMagicNumber(MagicNumber) ;
if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_FOK))
{
o_trade.SetTypeFilling(ORDER_FILLING_FOK);
}
else if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_IOC))
{
o_trade.SetTypeFilling(ORDER_FILLING_IOC);
}
else
{
o_trade.SetTypeFilling(ORDER_FILLING_RETURN);
}
o_trade.SetDeviationInPoints(Slippage);
if (o_symbol.Digits() == 3 || o_symbol.Digits() == 5 )
{
dStep = 10 ;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
datetime lpos_time = 0;
double lpos_price_open = 0.0;
ENUM_POSITION_TYPE lpos_type = -1;
int pos_count = 0;
double sum_profit = 0;
for (int i = PositionsTotal() - 1; i>=0; i--)
{
if (o_position.SelectByIndex(i))
{
if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
if (o_position.Time() > lpos_time)
{
lpos_time = o_position.Time(); //OrderOpenTime();
lpos_price_open = o_position.PriceOpen(); //OrderOpenPrice();
lpos_type = o_position.PositionType() ; //OrderTipe();
}
pos_count++;
sum_profit = sum_profit + o_position.Commission() + o_position.Swap() + o_position.Profit() ;
}
}
}
// Считаем кол-во отложенных ордеров
int stop_count=0;
for (int i=OrdersTotal()-1; i >=0; i--)
{
if (o_order.SelectByIndex(i))
{
if (o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
stop_count++;
}
}
if (!RefreshRates())
return ;
if(dtriger == 0 )
{
CloseAll();
return;
}
// + ----- Откраваем Первый ордер ++++++++++
if (pos_count == 0 && stop_count == 0 )
{
if ( dtriger == -1 && lpos_type != POSITION_TYPE_SELL)
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L 11111
}
if ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y 11111
}
}
// + ----- Переворот ++++++++++++++++++++++++++++
if (pos_count>0)
{
if(lpos_type == POSITION_TYPE_BUY )
{
if ( dtriger == -1 )
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L +++++
}
}
if (lpos_type==POSITION_TYPE_SELL )
{
if ( dtriger == 1 )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y +++++
}
}
}
if(pos_count>0 && stop_count>0)
DeleteStopOrders() ;
}
//-----------------------------------------------------------
bool RefreshRates()
{
if (!o_symbol.RefreshRates())
return(false) ;
if (o_symbol.Ask() == 0 || o_symbol.Bid() == 0)
return(false);
return(true);
}
//--- ---------------------------------------------------------
bool IsFillingTypeAllowed (string symbol, int fill_type)
{
int filling = (int)SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
return((filling && fill_type) == fill_type) ;
}
// --------------------------------------------------
void CloseAll()
{
for (int index = PositionsTotal()-1; index >=0; index--)
{
if (o_position.SelectByIndex(index))
{
if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
o_trade.PositionClose(o_position.Ticket());
}
}
}
}
//-----------------------------------------------------------
// Delete all pending orders
//-------------------------------------
void DeleteStopOrders()
{
for (int i = OrdersTotal() - 1; i >= 0; i-- )
{
if (o_order.SelectByIndex(i))
if(o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
o_trade.OrderDelete(o_order.Ticket());
}
}
//+------------------------------------------------------------------+
Приветствую....
Пожалуйста, вставляйте правильно код:
Пожалуйста, вставляйте правильно код:
начните читать хоть какую нибудь книгу по С++, Ваши вопросы это взрыв мозга, Вы пишете технические термины, на первый взгляд кажется, что Вы задаете конкретный вопрос, а по сути Вы просто оперируете терминами без понимания сути.... что макрос вернет? куда вернет? в теле макроса перезагружаемая функция.... я даже не могу обьяснить как выглядит Ваш вопрос.
Чтобы понять что такое макрос, пишите этот термин правильно, макроПОДСТАНОВКА , может быть Вам будет проще понять, что это
В mql4 урезаны возможности и с++, другими словами слишком статический язык. Можно сказать что моя идея провалилась, я написал простую перегрузку без классов я добавлял аргументы и присваивал им 0, пытался вызвать в макросе выбило ошибку что функций 3, т.е. получается нужно ещё расписывать какую вызвать и как я молчу о том с какими камнями столкнусь позже. Наверное лучше ничего не делать тогда не ошибёшься.
В mql4 урезаны возможности и с++, другими словами слишком статический язык.
что хоть урезали, конкретно?
другими словами не нужно, тем более даже гугл не знает "слишком статический язык", С++ он изначально статически типизированный язык и размышления просто бессмысленны - он просто такой
Наверное лучше ничего не делать тогда не ошибёшься.
буду краток RTFM ( lurkmore )
Вопрос чисто эстетики.
Как сделать так, чтобы вот здесь была собственная картинка? MT4