Закрытие позиций. По сигналу индикатора. - страница 8

 
Lukyanov:

Чистая прибыль 6157.73


Сергей, прибыль $6000 при 6000 - 9000 сделок.

1. Какое МОЖ?

2. 1500 сделок в день - это какой же брокер выдержит?

 

Добрый вечер всем! Встала проблема очередная. Пож. подскажите, кто может, - написать выражение

hann = iCustom(.... .... .... ) для индикатора -

Хотя бы в самом примитивном виде - чтобы задать парамтр Lb и номер бара...

/+------------------------------------------------------------------+
//|                                                          SSL.mq4 |
//|                                                          Kalenzo |
//|                                      bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Kalenzo"
#property link      "bartlomiej.gorski@gmail.com"
//----
#property indicator_buffers 1
#property indicator_color1 Blue
extern int Lb=10;
double ssl[],Hld,Hlv;
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ssl);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {   return(0);  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
   for(int i=Bars-Lb;i>=0;i--)     {
      if(Close[i]>iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_HIGH,i+1))
         Hld=1;
      else        {
         if(Close[i]<iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_LOW,i+1))
            Hld=-1;
         else
            Hld=0;
        }
      if(Hld!=0)
         Hlv=Hld;
      if(Hlv==-1)
         ssl[i]=iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_HIGH,i+1);
      else
         ssl[i]=iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_LOW,i+1);
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
Вот график -
 
rid:

Добрый вечер всем! Встала проблема очередная. Пож. помогите, кто может, - написать выражение

hann = iCustom(.... .... .... ) для индикатора

iCustom( Symbol(), Period(), "SSL", indLb, 0, bar );
 

Благодарю, komposter .!

 

Добрый день. Пож. подскажите.

В мт4 замонтирован индикатор Force-индекс. Двухполярный, со ср. линией в т.0 

Вот его код. 

#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
//---- input parameters
extern int ExtForcePeriod=13;
extern int ExtForceMAMethod=0;
extern int ExtForceAppliedPrice=0;
//---- buffers
double ExtForceBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string sShortName;
   SetIndexBuffer(0,ExtForceBuffer);
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
//---- name for DataWindow and indicator subwindow label
   sShortName="Force("+ExtForcePeriod+")";
   IndicatorShortName(sShortName);
   SetIndexLabel(0,sShortName);
//---- first values aren't drawn
   SetIndexDrawBegin(0,ExtForcePeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Force Index indicator                                            |
//+------------------------------------------------------------------+
int start()
  {
   int nLimit;
   int nCountedBars=IndicatorCounted();
//---- insufficient data
   if(Bars<=ExtForcePeriod) return(0);
//---- last counted bar will be recounted
   if(nCountedBars>ExtForcePeriod) nCountedBars--;
   nLimit=Bars-nCountedBars;
//---- Force Index counted
   for(int i=0; i<nLimit; i++)
      ExtForceBuffer[i]=Volume[i]*
(iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtForceAppliedPrice,i)-
iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtForceAppliedPrice,i+1));
//---- done
   return(0);
  }


Однако. Мне необходимо, чтобы индикатор весь целиком отрисовывался в плюсовой (или минусовой, не суть) зоне.

Сделать программно. 

Т.е. не так вот : double форсе=(iForce+10),  а именно программно!

Пож. подскажите, кто знает, что нужно добавить(вставить) в код для этого?

 
rid >>:

Однако. Мне необходимо, чтобы индикатор весь целиком отрисовывался в плюсовой (или минусовой, не суть) зоне.

Пож. подскажите, кто знает, что нужно добавить(вставить) в код для этого?

ИМХО, обертка в сигмоиду -- то что нужно. Буфер будет иметь значения от 0 до 1.

for(int i=0; i<nLimit; i++)
      ExtForceBuffer[i]=Volume[i]*
(iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtForceAppliedPrice,i)-
iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtForceAppliedPrice,i+1));

//заменяем на 

for(int i=0; i<nLimit; i++)
{
         ExtForceBuffer[i]=Volume[i]*
   (iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtForceAppliedPrice,i)-
   iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtForceAppliedPrice,i+1));

   ExtForceBuffer[i] = Sigmoid(ExtForceBuffer[i]);
}

//...

double Sigmoid(double x)
{
   double value = MathExp(x);
   return (value/(1 + value))
}
 

Благодарю, TheXpert ! Сейчас попробую.

//жжжжжжжжжжжжжжжжжжжжжжжжжжж

 Всё Получилось ! 

 

Добрый день всем. Хочу сделать свой первый эксперт, но не знаю, как написать код. Сделки открываются по МА. Если цена коснулась МА сверху, то бай. Если снизу то сел. При этом нужно учесть наклон МА. Наклон МА и открытие ордера должны быть однонаправлены. Благодарю.

 
Shu писал(а) >>

исследовательская работа увлекает! это даже полезно. и для мозгов и для экспириенса. приветствую и уважаю.

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

ps (исчо одно). если решите серьёзно отнестись к своему творению, не забывайте, что в любую секунду (миллисекунду) связь с ДЦ могет отвалиться. ничего страшного, но если у вас сигнал "сиюминутный", то, начиная закрывать по этому сигналу ордера, учтите это момент. в идеале вообще - даже чтобы после экстренного выключения/включения эксперта, он мог увидеть необходимость закрытия определённых ордеров (в данном случае). и закрыл их. хоть на следующем тике. .

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

Про массивы не очень понял. А вот вторая мысль - об том шоб эксперт если пропустит сигнал о закрытии - мог бы все равно одуплиться, что закрыть нужно - понравилась. Но вот как это сделать...

 

Добрый день.

Эксперт выставляет лимитные ордера байлимит вслед за движением цены на расст. =Дистанция.

Мне нужно, чтобы по мере движения ЦЕНЫ вверх лишние (самые далекие) ордера удалялись. 

Сделал. Но удаление  почему-то работает оч. некорректно! Первый ордер удаляется нормально. Потом, удаляются наоборот, ближние к цене! Потом перестают или удаляются "от фонаря", а журнал генерирует ошибку 4108 (неизвестный тикет). Потом некот. время нормально удаляются.

Вроде, где то тут говорилось, что важно правильно организавать перебор ордеров. 

//жжжжж Удаление лишних байлим ордеров жжжжжжжжж
if( NumberOfOrders(NULL,OP_BUYLIMIT,MAGIC)>КоличествоОрдеров  )  {
    //если ордеров больше заданного значения 
//for (int z = OrdersTotal() - 1; z >= 0; z -- )  {//перебираем с "конца"
  for ( int z=0;    z<OrdersTotal();        z++)  {//перебираем с начала         
  if (OrderSelect(z,SELECT_BY_TICKET, MODE_TRADES))          {//перебираем по тикету           
   if (OrderSymbol()==Symbol()&& OrderType() == OP_BUYLIMIT) {//выбираем байлимиты   
     if ( OrderOpenPrice() <(Ask-(КоличествоОрдеров*Дистанция)*Point) ) {
     //если расстояние от тек. цены больше заданного
   
   OrderDelete(OrderTicket(),Yellow);   //  return(0);    //удаляем самый дальний
            }}}}} 

Однако. Независимо от того, с "конца" или с начала организован перебор ордеров. Результат некорректный.

Вроде и код то, - самый простеший!

Что тут может быть не так? Пож. подскажите!

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