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

 
gordeef:

Да я и так стараюсь с осторожностью к разворотам и коррекции. А вот насчет истощения тренда, меня тоже это интересует, бродил по просторам форума и в CodeBase заглядывал, но индюков на эту тему не встречал. Поэтому будет интересно ознакомиться с твоими выкладками. И еще вопрос, скинули мне советник контролирующий мои потери и прибыли, вроде по картинке должен работать, но вопрос в том, заложен в нем профит в 15 пунктов, а я вижу что цена может и дальше пойти, так вот если я увеличу профит на какой либо одной сделке, это может нарушить общие расчеты и работу советника?
По мне так, чтобы правильно ответить на данный вопрос - нужно в кишках советника поковыряться... Может на него ответит кто-нить из гораздо более опытных товарищей... Думаю, их ответ будет более весомым с высоты их опыта - я ж только начинающий... :)
 
artmedia70:

ОК. Спасибо, Виктор. Так пока работает верно. Пока, потому что долго не следил, но НИКОГДА он мне до этого не выводил Тренд Вверх. Сейчас выводит:


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

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


Проблемы с логикой. Не более. Пробуй блок схемы рисовать. Помогает
 

Вот ещё вопрос назрел: сначала делал вывод строк в N-ном количестве, но потом, поняв, что одна из них будет лишней и её уместнее поместить в скобках в числовой процентной форме, убрал её и поставил рядом с той, где как раз для неё место:

Так было сначала:


А так теперь:


Мне не даёт покоя эхо прошедших событий... При первоначальном запуске советника до поступления нового тика всегда выводится то, что было изначально... Хотя в коде этого уже нет давно. Откуда берутся привидения???

 
artmedia70:

Вот ещё вопрос назрел: сначала делал вывод строк в N-ном количестве, но потом, поняв, что одна из них будет лишней и её уместнее поместить в скобках в числовой процентной форме, убрал её и поставил рядом с той, где как раз для неё место:

Так было сначала:


А так теперь:


Мне не даёт покоя эхо прошедших событий... При первоначальном запуске советника до поступления нового тика всегда выводится то, что было изначально... Хотя в коде этого уже нет давно. Откуда берутся привидения???





Код надо смотреть. Логику разбирать.
 
Vinin:

Проблемы с логикой. Не более. Пробуй блок схемы рисовать. Помогает

:):) Благодарю... Эх... У меня на полу уже такие "портянки" развёрнуты... мама миа!!! Вроде и логики-то особой в трёх строчках нету. Получается, что при проверке: если 1-е, значит так делать, при невыполнении 1-го - естественно следом идёт уже 2-е. При невыполнении 2-го следом же идёт третье...

Ан-нет... Нужно так: Если 1-е, то делаем так-с... Иначе, если 2-е, то уже делаем так-с, иначе, если совсем не 1-е и не 2-е, то делаем третье, а уж если и не 1-е, не 2-е и не 3-е, то тогда ищем ошибки в логике...

Ох... Запутался я сам совсем... Ладно, Виктор, ваше дополнение ведёт себя корректно, а уж для чего нужен ещё один оператор else, который стоит вроде бы в том месте, где и так по сути уже само собою наступает это "иначе", я буду позже разбираться, после разгрузки мозгов своих...

Спасибо за совет.

 
Vinin:

Код надо смотреть. Логику разбирать.

Там и логики то практически никакой - простейший вывод строк в порядке следования друг за дружкой...

/--------------------------------------------------------------- 1 --
// Функция вывода на экран графических сообщений.
//--------------------------------------------------------------- 2 --
  int Informations()
  {
   int   Win_ind;                     // Номер окна индикатора
   int   x,y;
   
   trH4     =Trend_PSAR(NULL,240);  // Четырёхчасовой тренд
   trH1     =Trend_PSAR(NULL,60);   // Часовой тренд
   trM30    =Trend_PSAR(NULL,30);   // Получасовой тренд
   trM15    =Trend_PSAR(NULL,15);   // 15-ти минутный тренд

//--------------------------------------------------------------- 3 --
   Win_ind= WindowFind("Info");        // Ищем номер окна индикатора
   if (Win_ind<0)return;               // Если такого окна нет, уходим
//--------------------------------------------------------------- 4 --
   x =10; y =17;
   ObjectCreate("Equ",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Equ",OBJPROP_XDISTANCE,x);
   ObjectSet("Equ",OBJPROP_YDISTANCE,y);
   ObjectSetText("Equ",    "Свободные средства",9,"Tahoma",Gold);
   
   ObjectCreate("EquVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("EquVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("EquVal",OBJPROP_YDISTANCE,y);
   ObjectSetText("EquVal",DoubleToStr(Equ_NEW,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("Prof",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Prof",OBJPROP_XDISTANCE,x);
   ObjectSet("Prof",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("Prof",   "Уровень фиксации прибыли (      %)",9,"Tahoma",Gold);
   
   ObjectCreate("ProfVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ProfVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("ProfVal",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("ProfVal", DoubleToStr(Equ_OLD+EquPerc,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------    
   ObjectCreate("Perc",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Perc",OBJPROP_XDISTANCE,x*18);
   ObjectSet("Perc",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("Perc", DoubleToStr(PercentEquityForClose,1),9,"Tahoma",Yellow);
   
//--------------------------------------------------------------------   
   ObjectCreate("Tral",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Tral",OBJPROP_XDISTANCE,x);
   ObjectSet("Tral",OBJPROP_YDISTANCE,y*3);
   ObjectSetText("Tral",   "Уровень включения трала",9,"Tahoma",Gold);
   
   ObjectCreate("TralVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TralVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("TralVal",OBJPROP_YDISTANCE,y*3);
   ObjectSetText("TralVal", DoubleToStr(Equ_OLD-EquPerc,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("Wloss",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Wloss",OBJPROP_XDISTANCE,x);
   ObjectSet("Wloss",OBJPROP_YDISTANCE,y*4);
   ObjectSetText("Wloss",  "Порог выставления безубытка",9,"Tahoma",Gold);
   
   ObjectCreate("WlossVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("WlossVal",OBJPROP_YDISTANCE,y*4);
   ObjectSetText("WlossVal", DoubleToStr(LevelProfit,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("WlossPP",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossPP",OBJPROP_XDISTANCE,x);
   ObjectSet("WlossPP",OBJPROP_YDISTANCE,y*5);
   ObjectSetText("WlossPP","Размер безубытка в пунктах",9,"Tahoma",Gold);
   
   ObjectCreate("WlossPPVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossPPVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("WlossPPVal",OBJPROP_YDISTANCE,y*5);
   ObjectSetText("WlossPPVal",DoubleToStr(LevelWLoss,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("ATR",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ATR",OBJPROP_XDISTANCE,x);
   ObjectSet("ATR",OBJPROP_YDISTANCE,y*6);
   ObjectSetText("ATR",    "Волатильность рынка",9,"Tahoma",Gold);
   
   ObjectCreate("ATRVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ATRVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("ATRVal",OBJPROP_YDISTANCE,y*6);
   ObjectSetText("ATRVal", DoubleToStr(VolATR,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("TP",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TP",OBJPROP_XDISTANCE,x);
   ObjectSet("TP",OBJPROP_YDISTANCE,y*7);
   ObjectSetText("TP",     "Размер Take Profit",9,"Tahoma",Gold);
   
   ObjectCreate("TPVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TPVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("TPVal",OBJPROP_YDISTANCE,y*7);
   ObjectSetText("TPVal", DoubleToStr(TPatr,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("trH4",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trH4",OBJPROP_XDISTANCE,x);
   ObjectSet("trH4",OBJPROP_YDISTANCE,y*9);
   
   ObjectCreate("ArrowH4",OBJ_LABEL,Win_ind,0,0,0,0);
   ObjectSet("ArrowH4",OBJPROP_XDISTANCE,x*8);
   ObjectSet("ArrowH4",OBJPROP_YDISTANCE,y*9);

   if (trH4==1)
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",Lime);
         ObjectSetText("ArrowH4",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",Lime);
      }
   else if (trH4==-1)
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowH4",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",LightGray);
         ObjectSetText("ArrowH4",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trH1",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trH1",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trH1",OBJPROP_YDISTANCE,y*9);
   
   ObjectCreate("ArrowH1",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowH1",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowH1",OBJPROP_YDISTANCE,y*9);
   
   if (trH1==1)
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",Lime);
         ObjectSetText("ArrowH1",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",Lime);
      }
   else if (trH1==-1)
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowH1",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",LightGray);
         ObjectSetText("ArrowH1",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trM30",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM30",OBJPROP_XDISTANCE,x);
   ObjectSet("trM30",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM30",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM30",OBJPROP_XDISTANCE,x*8);
   ObjectSet("ArrowM30",OBJPROP_YDISTANCE,y*10);
   
   if (trM30==1)
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",Lime);
         ObjectSetText("ArrowM30",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",Lime);
      }
   else if (trM30==-1)
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM30",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",LightGray);
         ObjectSetText("ArrowM30",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM15",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trM15",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM15",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowM15",OBJPROP_YDISTANCE,y*10);
   
   if (trM15==1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",Lime);
         ObjectSetText("ArrowM15",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",Lime);
      }
   else if (trM15==-1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM15",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else if (trM15==0)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
/*
   else
      {
         ObjectSetText("trM15","Хрен вам",9,"Tahoma",LightGray);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",LightGray);
      }
*/
//--------------------------------------------------------------------   
   

//--------------------------------------------------------------------   
   WindowRedraw();                      // Перерисовываем все объекты
   return;
  }
//--------------------------------------------------------------- 9 --
 

Люди, поделитесь готовым, рабочим (не глючным) темплэйтом советника, чтобы можно было только торговую стратегию менять, с возможностью при необходимости закрывать открытую позицию на противоположенную (переворот, но чтобы Buy/Sell в условии не через else был, а с возможностью отдельно прописывать условия:

 if условие на покупку
  {  
   Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell
}
if условие на продажу
{  
   Opn_S=true; // Критерий откр. Sell
Cls_B=true; // Критерий закр. Buy
  } ), либо закрытие позиции по ТР/SL.

Совсем голова кругом идёт, уже месяц бьюсь, не могу торговые стратегии с Омеги на МТ переложить, какие-то буферы/шмуферы, надуманные массивы, а в советнике ещё блоки учёта, открытия/закрытия и учёта ошибок.

Заранее спасибо всем откликнувшемся. 

 
Craft:

Люди, поделитесь готовым, рабочим темплэйтом советника, чтобы можно было только торговую стратегию менять, с возможностью при необходимости закрывать открытую позицию на противоположенную (переворот), либо по ТР/SL.

Совсем голова кругом идёт с учётом ордеров, блоками открытия/закрытия и учёт ошибок.

Отвечу, потому как сам с этим долго "парился" - только для тестирования стратегий и быстрого их изменения учёт ордеров можете оставить за бортом, учёт ошибок тоже уберите на полочку. Просто скопируйте то, что у него есть в учебнике и пусть они будут. Работайте только лишь с Trade() и Criterion(), если вы по учебнику Сергея Ковалёва делаете. Criterion() - для поиска точек входа по вашим стратегиям, Trade() - для открытия/ закрытия позиций. Работать с ними и их изменять для тестирования стратегий достаточно. А далее, набив руку в программировании, дойдёте уже и до своих функций, т.к. придёт понимание того, для чего всё это надобно и как всё работает...
 
artmedia70:
Отвечу, потому как сам с этим долго "парился" - только для тестирования стратегий и быстрого их изменения учёт ордеров можете оставить за бортом, учёт ошибок тоже уберите на полочку. Просто скопируйте то, что у него есть в учебнике и пусть они будут. Работайте только лишь с Trade() и Criterion(), если вы по учебнику Сергея Ковалёва делаете. Criterion() - для поиска точек входа по вашим стратегиям, Trade() - для открытия/ закрытия позиций. Работать с ними и их изменять для тестирования стратегий достаточно. А далее, набив руку в программировании, дойдёте уже и до своих функций, т.к. придёт понимание того, для чего всё это надобно и как всё работает...

    Спасибо, у меня всё оттестировано, хочу торговлю через МТ попробовать, чтобы реально учитывались ордера и открытые/закрытые позиций с исправлением баланса в случае необходимости.
 
Vinin:

Код надо смотреть. Логику разбирать.

В догонку код самого пустого индикатора... где тоже нет ничего...

 
#property indicator_separate_window
#property indicator_minimum 1
#property indicator_maximum 10
 
bool initFinished=false;
// добавляем переменную, которая будет запоминать состояние инициализации.
// false - инициализации еще не было
// true - была
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   ObjectsDeleteAll();
   // удаляем все объекты
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if(initFinished==false)
   {
      IndicatorShortName("Info");
 
      int winID=WindowFind("Info");
   
      if(winID<0)
      {
         // если номер подокна равен -1, то возникла ошибка
         Print("Чёт не могу твоего окошечка найти, пошел я отсюдова");
         return(0);
      }  
//------------------------ Тут можно рисовать ------------------------- 
 
// ----------------------- Но не нужно... ----------------

//------------------------------------------------------------------------- 
      WindowRedraw();      
            
      initFinished=true;
     
   }
   
   return(0);
}
Причина обращения: