как вариант
Создайте массив на нужное колличество баров и пишите туда значения фракталов. те у вас получается что что массив допустим на 300 значений вот и пишите значение фракталов на каждом баре в массив. большенство значений будут пустыми, а в некоторых будут значения фракталов. Когда массив заполнится используйте сдвигание всех значений на одно назад. я не думаю что вам нужно будет более 300 баров)
пример:
массив x[5] = {1, 2, 3, 4, 5}
Если некуда уже писать то сдвигаем все значения на 1 и получаем
массив x[5] = {2, 3, 4, 5, 6}
так... спасибочки, но есть одно маленькое "НО" - как? )))
(все на том же банальном примере алигатора):
void posOpen()
{
int ticket;
if ( iFractals(NULL, 0, MODE_LOWER, 3) < iAlligator(NULL, 0, 13, 0, 8, 0, 5, 0, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, 1) && Low[0] < iFractals(NULL, 0, MODE_LOWER,3) && OrdersTotal()<=pos_num)
{
ticket=OrderSend(Symbol(),OP_SELL,LotSize(),Bid,10,0,0,"My",MAGIC,0,Green);
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Loss*Point,OrderOpenPrice()-Profit*Point,0);
return;
}
if (iFractals(NULL, 0, MODE_UPPER, i)>iAlligator(NULL, 0, 13, 0, 8, 0, 5, 0, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, 1) && High[0]>iFractals(NULL, 0, MODE_UPPER, 3) && OrdersTotal()<=pos_num)
{
ticket=OrderSend(Symbol(),OP_BUY,LotSize(),Ask,10,0,0,"My",MAGIC,0,Green);
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-Loss*Point,OrderOpenPrice()+Profit*Point,0);
return;
}
Шёл мимо. Заглянул.
Возможно пригодятся функции И.Кима для реализации идеи.
Функция FindNearFractal(). Стр.37
Эта функция выполняет поиск ближайшего фрактала и возвращает его ценовой уровень
ФУНКЦИЯ BarsBetweenLastFractals(string sy="", int tf=0)),
Расстояние между двумя соседними фракталами в барах
Функция GetFractallBar(). Стр.41
Возвращает номер бара вершины ближайшего фрактала
'Полезные функции от KimIV'
И стр. 43-44 по фракталам в той же ветке Игоря.
Кроме того, вот тут есть немного по фракталам - на 2 страничке - 'Вопрос к профессионалам '
Доброе утро.
Пожалуйста подскажите. По нескольким инструментам в мт4 работают советники.
По ценам открытия.
Входы во всех советниках выполнен вот так (чтобы советники не мешали др. другу):
if(Time[0] == prevtime) return(0);//ждём появления нового бара prevtime = Time[0];//если появился новый бар , включаемся //------------------------------- ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"ттт_022",Magic,0,Red); if(ticket < 0) { { Print("Ошибка открытия ордера SELL #", GetLastError()); return (0);} Sleep(10000);// Вот здесь сбрасываем флаг сформировавшегося бара, // чтобы на следующем тике, а не на следующем баре, prevtime = Time[1]; } // опять повторить операцию
Непонятно почему, но этот прием не работает!
При открытии нового бара обычно по 2-3 парам есть сигналы на открытие или закрытие, или модификацию и т.п.
Но выполняется только операция по какой-ниб. одной паре! И не более того! После чего, советники ждут след. бара и опять, - после его появления выполняется только одна операция по одной паре!
Журнал ошибок при этом не пишет.
Хотя сигналы по др. парам есть со всей очевидностью!
Подскажите, в чем может быть проблема?
IsTradeAllowed( | ) |
Доброе утро.
Пожалуйста подскажите. По нескольким инструментам в мт4 работают советники.
По ценам открытия.
Входы во всех советниках выполнен вот так (чтобы советники не мешали др. другу):
Непонятно почему, но этот прием не работает!
При открытии нового бара обычно по 2-3 парам есть сигналы на открытие или закрытие, или модификацию и т.п.
Но выполняется только операция по какой-ниб. одной паре! И не более того! После чего, советники ждут след. бара и опять, - после его появления выполняется только одна операция по одной паре!
Журнал ошибок при этом не пишет.
Хотя сигналы по др. парам есть со всей очевидностью!
Подскажите, в чем может быть проблема?
торговый поток занимается первым из советников, остальные не могут производить операции с ордерами, т.к. торговый поток занят.
Перед каждой операцией по модификации/открытии/закрытии ордера используйте конструкцию
while(IsTradeContextBusy()) { Sleep(500); }
и проверяйте результаты выполнения операций, если неудача, то заход по-новой.
Благодарю, проверю.
Но что это даст ? Да, - Торговый поток занят, пока обрабатывается и исполняется сигнал по одной паре.
Но после исполнения этого сигнала торговый поток "по любому" освобождается и вот тут то и должно сработать условие
Sleep(10000);// Вот здесь сбрасываем флаг сформировавшегося бара, // чтобы на следующем тике, а не на следующем баре, prevtime = Time[1]; } // опять повторить операцию
и на этом же баре должен отработать повторившийся сигнал по другой паре!
Но этого не происходит. А советник ждет следующего бара.
Не вижу ошибки. Может она в другом куске кода.
Добрый вечер.
Вот у меня советник работает на конкурсном счете (и сервере).
На тф=н1.
Закралось подозрение, что сервер не реагирует на сигналы советника.
Ф-и открытия/закрытия позиций взял из "замонтированного" советника в мт4 Moving Average
//+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double ma; if(iVolume("USDJPY_FX",60,0)>1) return; //(с первым тиком нового бара начинаем работу) ma=iMA("USDJPY_FX",0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!="USDJPY_FX") continue; //---- check order type if(OrderType()==OP_BUY) { if(Open[1]>ma && Close[1]<ma) OrderClose(OrderTicket(),OrderLots(),Bid,3,White); break; } if(OrderType()==OP_SELL) { if(Open[1]<ma && Close[1]>ma) OrderClose(OrderTicket(),OrderLots(),Ask,3,White); break; } } //---- }
Я полагал, что такой алгоритм задает работу в режиме по ЦЕНАМ ОТКРЫТИЯ.
Однако. Вот уже не первый раз замечаю, - что позиция закрылась не в начале бара.
Вот например, сегодня позиция закрылась в 16:43 !!! При работе на тф=н1 !
Так подскажите!
Всё-таки, как работает такой код ?
По ценам открытия или нет ?
В любой мт4 можно глянуть советник Moving Average
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Плиз...не знаю как бы выразить - но лучше показать подскажите пожалуйста как сделать чтобы фракталы запоминались в памяти у советника и брался нужный из нескольких. Штатная функция
"iFractals(NULL, 0, MODE_UPPER, 3)" Отслеживает только фракталы на 3 свечи в прошлом и все - упуская при этом нужные фракталы.
Подобное действо можно к примеру разобрать на примере работы фрактала + алигатора: типо самый близкий фрактал на покупку и продажу запоминается, а потом совершается сделка на пробой... ну я думаю кто знаком с этим тот поймет мои корявые мысли.