[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 71

 
DhP:
MagicNumber в этом случае не меняется, если это не предусмотрено кодом советника.

Спасибо Всем!
 
Roman.:


Решение:

Приведу для бай (селл - по аналогии):

1. перелом МА - получаем значения МА на 3-м, 2-м и 1-ом барах - сравниваем. Если значения МА на барах №№ 3>2 и 2<1, то это перелом.

2. далее - фрактал - пробитие - сигнал к сделке

3. Что касается перебора МА - во внешние (оптимизируемые) переменные выносите:

Period_MA (можете ставить от 2 до 240 с шагом 2), MODE - (метод вычисления МА - диапазон изменений от 0 до 3 шаг 1), PRICE_TYPE - (ценовая константа - диапазон изменений от 0 до 6 шаг 1 ), слышал, что при работе внутри дня разумнее МА считать по средним значениям (цена закрытия не принципиальна), при работе на дневных свечках МА считать по ценам закрытия дней.

PERIOD - меняете вручную при каждой последующей оптимизации - 1,5,15,30,60,240...

Нажмите F1 на iMA - еще раз там все внимательно перечитайте.

Ну, и, естественно ТР и стоп-лосс оптимизируйте как обычно.

П.С. Не забудьте написать информатион по результатам тестов... :-)))

Результаты тестов по ТФ=1 мин. не дали прибыльных вариантов, даже если оптимизировать советник раз в день.
 
DhP:
При частичном закрытии позиции можно изменить магик. Уверен, что Вы это легко сможете написать.

вы вероятно обладаете знаниями, которые недоступны mql-сообществу или вы просто не поняли вопроса или наивно заблуждаетесь, что функция OrderClose меняет магик.

 
gince:

Понял так, что у меня нет начальной flag[i+1] установки. Если так, то в каком месте и как это сделать ?

Если установлю 1, то при запуске индикатора, он (индикатор) будет ждать изменения.

правильно делать так:

if ((flag[i]==1 || flag[i]==0) && условие продажи)
c условием того, что неинициализированные flag =0 (или же брать EMPTY_VALUE....)
 
sergeev:

правильно делать так:

c условием того, что неинициализированные flag =0 (или же брать EMPTY_VALUE....)

Всем спасибо. Сделал то что хотел.

 
volshebnik:
Результаты тестов по ТФ=1 мин. не дали прибыльных вариантов, даже если оптимизировать советник раз в день.

чем ниже ТФ, тем выше шум...
 
Roman.:

чем ниже ТФ, тем выше шум...
Да, но, если стратегия верна, то должна, мне кажется, работать на любом ТФ, только с разными параметрами. Результат тестов по ТФ=5 мин. тоже не дал прибыльных вариантов.
 
volshebnik:
Да, но, если стратегия верна, то должна, мне кажется, работать на любом ТФ, только с разными параметрами. Результат тестов по ТФ=5 мин. тоже не дал прибыльных вариантов.

там верна страгия. Я под шофе сейчас. Отдыхаю.
 
sergeev:

у вас в коде все равно ошибка осталась.

запомните: стопы и тейки в отложках отсчитываются не от текущей цены, а от цены открытия ордера.



Вам отдельная благодарность и респект :)))))

Исправил ошибки (надеюсь теперь все :)) ) + добавил лимитники. Будет бесценной вещью для тех, кому позарез нужно присваивать номер Magic размещаемым ордерам.

Пользуйтесь на здоровье!

#property copyright "Copyright © 2010 - 2011, Хлыстов Владимир, в редакции AMRo"
#property link      "cmillion@narod.ru, nemo811@mail.ru"
#property show_inputs
/*
Иногда требуется помочь советнику добавить ордер, но чтобы советник его принял за свой
необходим Magic номер. Для выставления ордера с таким номером и предназначен этот скрипт.
Возможна одновременная установка до 6 типов ордеров. При сбоях связи или резком движении цены
будет выполнено 10 попыток выставления ордера, после чего скрипт закончит работу.
*/
//--------------------------------------------------------------------
extern int     Magic       = 0;        //уникальный номер ордера
extern bool    BUY         = false;    //открыть ордер BUY
extern bool    BUY_STOP    = false;    //поставить ордер BUY STOP
extern bool    BUY_LIMIT   = false;    //поставить ордер BUY LIMIT
extern bool    SELL        = false;    //открыть ордер SELL
extern bool    SELL_STOP   = false;    //поставить ордер SELL STOP
extern bool    SELL_LIMIT  = false;    //поставить ордер SELL LIMIT
extern double  Lot         = 0.1;      //объем ордера
extern int     takeprofit  = 0;        //уровень выставления TP, если 0, то TP не выставляется
extern int     stoploss    = 0;        //уровень выставления SL, если 0, то SL не выставляется
extern int     DistanceSet = 40;       //расстояние от рынка для отложенника
extern int     slippage    = 3;        //максимально допустимое отклонение цены для рыночных ордеров
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
   if (BUY)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy");
   }
   if (SELL)
   {  
      if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell");
   }
   if (BUY_STOP)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask + DistanceSet*Point - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy Stop");
   }
   if (SELL_STOP)
   {  
      if (takeprofit!=0) TP = NormalizeDouble(Bid - DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid - DistanceSet*Point + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell Stop");
   }
   if (BUY_LIMIT)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask - DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - DistanceSet*Point - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy Limit");
   }
   if (SELL_LIMIT)
   {  
      if (takeprofit!=0) TP = NormalizeDouble(Bid + DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid + DistanceSet*Point + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell Limit");
   }
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error,err;
   while (true)
   {  error=true;
      if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
      if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"",Magic,0);
      if (ord=="Buy Stop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
      if (ord=="Sell Stop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
      if (ord=="Buy Limit" ) error=OrderSend(Symbol(),OP_BUYLIMIT, Lot,NormalizeDouble(Ask - DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
      if (ord=="Sell Limit") error=OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(Bid + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
      if (error==-1) //неудачная попытка
      {  
         ShowERROR();
         err++;Sleep(2000);RefreshRates();
      }
      if (error || err >10) return;
   }
return;
}                  
//--------------------------------------------------------------------
void ShowERROR()
{
   int err=GetLastError();
   switch ( err )
   {                  
      case 1:   return;
      case 2:   Alert("Нет связи с торговым сервером ",Symbol());return;
      case 3:   Alert("Error неправильные параметры ",Symbol());return;
      case 130: Alert("Error близкие стопы   Ticket ",Symbol());return;
      case 134: Alert("Недостаточно денег   ",Symbol());return;
      case 146: Alert("Error Подсистема торговли занята ",Symbol());return;
      case 129: Alert("Error Неправильная цена ",Symbol());return;
      case 131: Alert("Error Неправильный объем ",Symbol());return;
      case 4200:Alert("Error Объект уже существует ",Symbol());return;
      default:  Alert("Error  " ,err," ",Symbol());return;
   }
}
//--------------------------------------------------------------------
 
Roman.:

там верна страгия. Я под шофе сейчас. Отдыхаю.
По ТФ = 15 мин. то же самое. Пока не вижу "верности" в этой стратегии, может, ещё покажется впереди. (Приятного отдыха))
Причина обращения: