Ваши вопросы по языку MQL4

_SERG_

Активный участник
А кто вам сказал,что здесь не смог?:D Это просто новый подход,поразмыслил на "молекулярном" уровне, новая система,потенциально прибыльная,но требующая определенных условий.
Про HFT(высокочастотный трейдинг)слышал в общих чертах,есть предположения на этот счет,потому и спросил мож кто юзал? А фантазиями нет времени заниматься,все это реальней некуда.

Подход приходится выбирать из предложенных.:laugh:

Опять же, если ДЦ тебе даёт четыре - пять котировок в секунду для пятизнака, или четыре - двадцать котировок в минуту, для четырёхзнака., а ты обрабатываешь бары, где там высокочастотная?оО

Опять же, высокочастотная это некий компромисс, а не цель.

Исходи из потребности и возможностей, и как следствие результата.
 

vladradon

Программист
Опять же, если ДЦ тебе даёт четыре - пять котировок в секунду для пятизнака, или четыре - двадцать котировок в минуту, для четырёхзнака., а ты обрабатываешь бары, где там высокочастотная?
И еще о высокочастотной и скальперной торговле можно забыть, если брокер типа Инсты, аннулирует сделки, находящиеся в рынке меньше 5-ти минут. Здесь вообще половина стратегий сразу отметается.)))
 

Rennela

Новичок форума
3. Если для МТ4 то можно один советник повесить на 8 графиков одной валюты и они не будут мешать друг другу.
Я тут подумал,есть же еще вариант с нескольких терминалов подключиться с одного торгового счета на разные сервера брокера(в основном у брокеров несколько торговых серверов),тогда каждый терминал будет решать свою задачу,даже одновременное открытие ордеров и общая скорость торговой системы увеличится.
 

_SERG_

Активный участник
Я тут подумал,есть же еще вариант с нескольких терминалов подключиться с одного торгового счета на разные сервера брокера(в основном у брокеров несколько торговых серверов),тогда каждый терминал будет решать свою задачу,даже одновременное открытие ордеров и общая скорость торговой системы увеличится.

Если с разных айпишников, то может к разным серверам и подключишься.
Это тебе не совок, когда в разных отделениях банка , с одного счёта снимали средства. Вначале быстренько в одном, садились в машину, и в другое отделение, и там опять снимали. Но ток один раз.:laugh:
 

vladradon

Программист
Я тут подумал,есть же еще вариант с нескольких терминалов подключиться с одного торгового счета на разные сервера брокера(в основном у брокеров несколько торговых серверов),тогда каждый терминал будет решать свою задачу,даже одновременное открытие ордеров и общая скорость торговой системы увеличится.
У большинства брокеров, имеющих не один реальный сервер, идет привязка реального счета к одному серверу, поэтому торговать на одном счете с разных серверов не получится, даже если использовать разные IP или VPS-ы. Заходить параллельно с разных своих устройств можно и управлять счетом даже одновременно с нескольких своих компов или VPS-ов, только скорости обработки запросов это не изменит, так же, как и никто брокеру не запретит в любой момент включить реквоты и любая попытка сыграть на скорости не только будет бесполезна, но еще и в минус уведет. А если еще брать во внимание плавающий спред, который за время от посылки запроса серверу до исполнения команды, может вырасти и плюсовую сделку увести в минус.
 

Rennela

Новичок форума
Если с разных айпишников, то может к разным серверам и подключишься.
Это тебе не совок, когда в разных отделениях банка , с одного счёта снимали средства. Вначале быстренько в одном, садились в машину, и в другое отделение, и там опять снимали. Но ток один раз.:laugh:
Поэтому, наверно, совок и развалился. Печально.
 

kamilkz

Почетный гражданин
Подскажите правильно или нет определение пересечение ценой трендовой линии:

value_0=ObjectGetValueByShift("Trend_line",0);
value_1=ObjectGetValueByShift("Trend_line",1);
if (Close[0]>value_0 && Close[1]<value_1) signal_0;
//пересечение ценой трендовой линии вверх
if (Close[0]<value_0 && Close[1]>value_1) signal_1;
//пересечение ценой трендовой линии вниз


и еще как (кокой значок) выкладывать код
 

eevviill2

Местный знаток
Подскажите правильно или нет определение пересечение ценой трендовой линии:

value_0=ObjectGetValueByShift("Trend_line",0);
value_1=ObjectGetValueByShift("Trend_line",1);
if (Close[0]>value_0 && Close[1]<value_1) signal_0;
//пересечение ценой трендовой линии вверх
if (Close[0]<value_0 && Close[1]>value_1) signal_1;
//пересечение ценой трендовой линии вниз


и еще как (кокой значок) выкладывать код
Да.
php
 

ivansss

Новичок форума
Добрый день товарищи программисты.
Вот функция частичного закрытия по покупке:
void TrailLevel()
{for ( int i = 0; i<OrdersTotal(); i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if ((OrderSymbol() == Symbol())&& (OrderMagicNumber() == Magic) && (OrderType() == OP_BUY))
{

if((OrderProfit()>0)&&( Ask > OrderOpenPrice()+ NormalizeDouble(10*n*Point,Digits)))


{ Comment(OrderTicket());


OrderClose(OrderTicket(),OrderLots()*PercentClose/100, NormalizeDouble(Bid,Digits), MaxSpread, Blue);
n++;
}}} }

Работает нормально. Закрывает каждые десять пунктов, позже прикручу уровни.

Вопрос в том, что это все работает с одним ордером, а если у меня несколько ордеров на покупку, переменная n которая увеличиваеться после частичного закрытия и передвигает уровень следующего закрытия выше. Так вот если тикетов несколько, а переменная одна, как можно из этого ада вырваться?:facepalm:
 

Ugar

Гуру форума
Вопрос в том, что это все работает с одним ордером, а если у меня несколько ордеров на покупку, переменная n которая увеличиваеться после частичного закрытия и передвигает уровень следующего закрытия выше. Так вот если тикетов несколько, а переменная одна, как можно из этого ада вырваться?:facepalm:
Примитивный выход используй двухмерный массив, для тикетов и для n.
 
Последнее редактирование:

eevviill2

Местный знаток
Не знаю как я это напишу,но ход мысли понятен, спасибо)
Типа так.
PHP:
//+------------------------------------------------------------------+
#property copyright "eevviill"
#property link      "http://volli6.blogspot.com/"
#property version   "1.00"
#property strict



extern int Magic = 0;
extern double PercentClose = 20;
extern int step = 10;



struct tic_lev
{
int ticket[];
int lev[];
};

tic_lev data;



//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
ArrayInitialize(data.ticket,-1);
ArrayInitialize(data.lev,-1);

EventSetTimer(1);


   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTimer()
  {
  ArrayResize(data.ticket,OrdersTotal());
    ArrayResize(data.lev,OrdersTotal());
  
//write in buf
for ( int i = OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue; 

if((OrderType() == OP_BUY || OrderType()==OP_SELL) && StringFind(OrderComment(),"from")==-1)
{ 
data.ticket[i]=OrderTicket();
data.lev[i]=step;
}
}//end for


//trail
for (int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(data.ticket[i],SELECT_BY_TICKET))
{
if(OrderCloseTime()==0)
{
if(OrderType() == OP_BUY)
{ //Alert(data.ticket[i]," ",data.lev[i]);
if(Ask > OrderOpenPrice()+ NormalizeDouble(data.lev[i]*Point*10,Digits))
{ 
if(OrderClose(OrderTicket(),OrderLots()*PercentClose/100, NormalizeDouble(Bid,Digits), 0, clrBlue)) 
{
if(OrderLots()!=OrderLots()*PercentClose/100)
{
if(OrderSelect(data.ticket[i],SELECT_BY_TICKET))
{
data.lev[i]+=step; 
data.ticket[i]=int(StringSubstr(OrderComment(),4));
}
}
else
{
data.ticket[i]=-1;
data.lev[i]=-1;
}
}
}
}
}
}
else
{
data.ticket[i]=-1;
data.lev[i]=-1;
}
}





  }
//+------------------------------------------------------------------+
 

ivansss

Новичок форума
struct*tic_lev
{
int*ticket[];
int*lev[];
};

tic_lev*data;

Спасибо, ваш код успешно интегрировал в свой, за структуру не проясните зачем она? Чтобы двумерный массив инициализировать?Почему эти массивы дальше не используются, а дальше создаются новые массивы:

tic_lev*data;- что это за переменная и почему она никак не обозначаеться?

int OnInit()
{
ArrayInitialize(data.ticket,-1);
ArrayInitialize(data.lev,-1);

EventSetTimer(1);


return(INIT_SUCCEEDED);
}
 

Ugar

Гуру форума
Спасибо, ваш код успешно интегрировал в свой, за структуру не проясните зачем она? Чтобы двумерный массив инициализировать?Почему эти массивы дальше не используются, а дальше создаются новые массивы:

tic_lev*data;- что это за переменная и почему она никак не обозначаеться?

int OnInit()
{
ArrayInitialize(data.ticket,-1);
ArrayInitialize(data.lev,-1);

EventSetTimer(1);


return(INIT_SUCCEEDED);
}
Да не грузись. Не нравится структура используй 2 мерный массив, типы данных одинаковые.
Например
int Tick_lev[][2];
Простая структура однозначно удобнее если в ней типы данных разные, а здесь тикет int да и номер уровня может быть int. в такой ситуации структура для понтов.
 

eevviill2

Местный знаток
Спасибо, ваш код успешно интегрировал в свой, за структуру не проясните зачем она? Чтобы двумерный массив инициализировать?...
Чтобы использовать одномерные массивы+вдруг надо будет хранить ещё какую то информацию(коментарий ордера,стопы...).
 

Ugar

Гуру форума
Кстати структуру можно было сделать проще. Так как длинна массивов в структуре одинаковая, всю структуру сделать массивом. Например если сделать так
struct tic_lev
{
int ticket;
int lev;
};

tic_lev data[];
То ресайзить можно всю структуру
ArrayResize(data,OrdersTotal());

Тогда обращаться придётся к ней так
data[i].ticket=OrderTicket();
data
[i].lev=step;
 

AlexeyVik

Программист mql4 mql5
Да не грузись. Не нравится структура используй 2 мерный массив, типы данных одинаковые.
Например
int Tick_lev[][2];
Простая структура однозначно удобнее если в ней типы данных разные, а здесь тикет int да и номер уровня может быть int. в такой ситуации структура для понтов.
Мало того что для понтов, да ещё и через жжжж.... сделана. В такой структуре достаточно легко получить рассинхрон тикетов и уровней.

ps; Вот последнее твоё сообщение увидел позже... Да, это правильная структура. Точней массив структур. Тут никакого рассинхрона быть не может.
 
Последнее редактирование:
Верх