[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 742

 
artmedia70:

Неохота разбираться с вашим кодом (зло, но честно :)). Скажите, что конкретно хотите получить в итоге и я вам напишу нужную функцию. Честно - так мне будет проще. Мне б со своим кодом разобраться... :)

... Или лягте, поспите, а назавтра все ваши пазлы и соберутся... :) Я лично так делаю, если ничё не понимаю... Кстати, спать пошёл - пол-пятого утра ужо...


после установки ордера переменые которые послужили к ритерием для выставления ордера д олжны опять получить значение "0",

 
Кто знает. Как можно получить соотношение движения индикатора ( по своей шкале) к примеру RSI, с соотношением пройденых тиков валюты? Поясню, если RSI к примеру прошел от 0 до значения 50 - скольким пынктам это будет равно.
 
Infinity:
  Кто знает. Как можно получить соотношение движения индикатора ( по своей шкале) к примеру RSI, с соотношением пройденых тиков валюты? Поясню, если RSI к примеру прошел от 0 до значения 50 - скольким пунктам это будет равно?

Отлавливаем последнее значение индикатора RSI на нулевой свече. Ждём следующего тика. Тик пришёл. Пусть цена тикнула ровно на 1 пункт. Смотрим, насколько изменился RSI. Ну и всё - коэффициент у нас в кармане.
 
drknn:

Отлавливаем последнее значение индикатора RSI на нулевой свече. Ждём следующего тика. Тик пришёл. Пусть цена тикнула ровно на 1 пункт. Смотрим, насколько изменился RSI. Ну и всё - коэффициент у нас в кармане.

А как тогда получается, я к примеру отловил коэфициент 1 пункта, RSI  прошел по своей шкале 50, получается что он 50 пунктов прошел, а на деле был флэт. и свеча 2 пунктов. там же еще и сила движения заложена. Так как в таком случае определять
 
cyclik33:

Уважаемый Анатолий. Огромное Вам спасибо за данный код. Еще такой вопрос, а как сделать так, чтобы он постоянно работал, но мог заключить только 1 сделку на баре?

Борис, ну так это же еще проще. Бросаете эту строчку:

datetime new;

В самых верх кода (чтобы была отдельно, а не в какой либо функции).
А далее в тех местах, где есть вызов функции OrderSend(...), просто заключаете ее в дополнительные объятия оператора if

if(new != Time[0]){
   new = Time[0];
   // здесь функция OrderSend(...);
}

Теперь перед открытием очередной сделки, будет происходить проверка, происходили на текущем баре сделки или нет. Если они были, то текущий бар был запомнен в переменной new, и если текущий бар, совпадает с сохраненным, то сделка открыта не будет. Соответственно если бар новый, то его время открытия не совпадет с данными переменно new, сделка откроется, переменная new, получит новое значение.

Точно не знаю архитектуру вашего эксперта, но данный способ должен работать в большинстве случаев.

 
FoxUA:

после установки ордера переменые которые послужили к ритерием для выставления ордера д олжны опять получить значение "0",


Пробовал скомпилировать ваш код, посыпались ошибки.
Вам нужно переменные, которые послужили критерием для выставления ордера использовать в двух методах (start() и NewOrder1 ()), объявите их вне всех функций:

bool b,s, //соответственно бай или селл  
bs,// если закрытие по стоплоссу ордера бай
ss,// если закрытие по стоплоссу ордера sell
bt,
st;//      то же по ТП
double bl,sl; // лоты соответсвенно для бай и селл
далее в цикле  for
for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
            }
         }
      }


}//end

пусть им присваиваются нужные значения, а после успешного открытия ордера в функции NewOrder1() они там же и должны обнулятся 

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
//-----------
if(tic1<0){
   Print(GetLastError());
}else{
b=0;
s=0; 
bs=0;
ss=0;
bt=0;
st=0;
bl=0;
sl=0;
}
//-----------
return(0);}

Что-то в этом духе.

 
Infinity:

Кто знает. Как можно получить соотношение движения индикатора ( по своей шкале) к примеру RSI, с соотношением пройденых тиков валюты? Поясню, если RSI к примеру прошел от 0 до значения 50 - скольким пынктам это будет равно.  

Задавался я как то подобной целью, написал такую вот «линейку», может и вам подойдет.  

//+------------------------------------------------------------------+
int get_pips_RSI_path(int home_shift, int end_shift){
   double home_index, end_index;
   double home_price, end_price;
   int path;
   
   home_index = iRSI(NULL,0,14,PRICE_CLOSE,home_shift);
   home_price = Close[home_shift];
   end_index = iRSI(NULL,0,14,PRICE_CLOSE,end_shift);
   end_price = Close[end_shift];
   
   if(end_price > home_price)path = (end_price - home_price)/Point; else path = (home_price - end_price)/Point;
   
   Alert("Между значениями RSI ", home_index, " и ", end_index, " было пройденно ", path, " пунктов.");
   return(path);
}
//+------------------------------------------------------------------+

В качестве параметров передаете сдвиги баров, на которых находятся нужные значения RSI, в ответ получаете расстояние между ними в пунктах.

 
ToLik_SRGV:

Задавался я как то подобной целью, написал такую вот «линейку», может и вам подойдет.  

В качестве параметров передаете сдвиги баров, на которых находятся нужные значения RSI, в ответ получаете расстояние между ними в пунктах.


спасибо, вечером проверю

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

 
ToLik_SRGV:

Возможно, просто не удалось подобрать прибыльную комбинацию параметров, попробуйте снять галочку с пункта «Пропускать бесполезные результаты».

И не забудьте убедится что вы проставили галочки в настройках эксперта напротив тех параметров которые хотите оптимизировать, а также задали шаг, и ограничители оптимизации.

Спасибо, так и есть, стояла галочка "Пропустить бесполезные результаты".
 
artmedia70:


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

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

Так вот... Когда трендовая перескакивает на новый наименьший экстремум, возникает ситуация, при которой линия индюка на втором баре становится выше линии трендовой и построенного уровня, а на первом баре - ниже, т.е. возникает ненужный сигнал на продажу (в данном случае):


На рисунке видно как трендовая перескочила на новый экстремум (место обозначено стрелочкой вниз) и ценовой уровень новой трендовой на первом баре (гориз. красная чёрточка)
стал ниже чем линия AD на втором, при этом линия AD на первом ниже ценового уровня...
Соответственно, перемещением трендовой линии на более низкий экстремум смоделировали ненужный сигнал... Такой же ненужный сигнал имел место быть чуть раньше -
я его отметил вертикальной светло-голубой линией...

Отсюда вопрос - как избежать такой ситуации? Из сил выбился, пытаясь чё-нить придумать...
Есть какие мысли? Спасибо... :)



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

Причина обращения: