КАК 100% заинтересовать программиста , написать советник по вашей ИДЕЕ - страница 11

 

Либо организовать у етом советнике регулируемую установку тейк прфита.

вот полный код.

 
//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
extern double lot=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int tiket=0;
//----
if (iVolume(NULL,0,0)==1){
    Print("WATR1="+iCustom( NULL, 0, "WATR", 0, 0) );
    Print("WATR2="+iCustom( NULL, 0, "WATR", 1, 0) );
    
    if (iCustom( NULL, 0, "WATR", 0, 2)<1000 && iCustom( NULL, 0, "WATR", 1, 1)<1000) {tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,iCustom( NULL, 0, "WATR", 1, 0),0,NULL,16384,0,Red);}
    if (iCustom( NULL, 0, "WATR", 1, 2)<1000 && iCustom( NULL, 0, "WATR", 0, 1)<1000) {tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3, iCustom( NULL, 0, "WATR", 0, 0),0,NULL,16384,0,Green);}
    CheckOrders();
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
}
void CheckOrders(){
int pos=0;
int total=OrdersTotal();
for (pos=0;pos<total;pos++) {
if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true){ 
if (OrderType()==OP_BUY && OrderStopLoss()<iCustom( NULL, 0, "WATR", 0, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 0, 1),OrderTakeProfit(),0,Green);
if (OrderType()==OP_SELL && OrderStopLoss()>iCustom( NULL, 0, "WATR", 1, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 1, 1),OrderTakeProfit(),0,Red);
                                                                                   }
                                                          }
                                      }
 
Ultramarin:

Либо организовать у етом советнике регулируемую установку тейк прфита.

вот полный код.

Работать не пробывал?
 
Registr:
Ultramarin:

Либо организовать у етом советнике регулируемую установку тейк прфита.

вот полный код.

Работать не пробывал?
Если это полный код советника, то Registr дал Вам самый лучший совет.
 

Могу с ходу добавить несколько замечаний

1. оператор return(0) принадлежащий функции start должен как минимум продублироваться ниже за одну фигурную скобку. Т.К. сейчс он только отработает если сработае условие на объем равный 1

остальное время функция start как бы должна закрываться не корректно.

2 условия значения от вызываемого индикатора <1000 это наверное хотели показать что на баре нет одного значения из буферов

тоесть как бы пересечение (смена цвета индикатора и его взаимного расположения относительно текущей цены)

боюсь в таком варианте он будет работать только на тех инструментах у которых текущее значение цены больше 1000 (к примеру ДОУ)

при условии что индикатор отрисовывает на текущем баре только один цвет (значение другого буфера на этом баре равно 0)

иначе практически на любой валютной паре текущее значение индикатора всегда будет меньще 1000 и условия будут срабатывать на каждом баре

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


int time;
 
int start
   {
      if (time!=Time[1])
         {
            // расчет индикатора и выполение действий с ордерами
            //-----
            //-----
            //-----
            //-----
            time=Time[1];
 
         }
       return(0);
   }



 
olyakish:

Могу с ходу добавить несколько замечаний

1. оператор return(0) принадлежащий функции start должен как минимум продублироваться ниже за одну фигурную скобку. Т.К. сейчс он только отработает если сработае условие на объем равный 1

остальное время функция start как бы должна закрываться не корректно.

2 условия значения от вызываемого индикатора <1000 это наверное хотели показать что на баре нет одного значения из буферов

тоесть как бы пересечение (смена цвета индикатора и его взаимного расположения относительно текущей цены)

боюсь в таком варианте он будет работать только на тех инструментах у которых текущее значение цены больше 1000 (к примеру ДОУ)

при условии что индикатор отрисовывает на текущем баре только один цвет (значение другого буфера на этом баре равно 0)

иначе практически на любой валютной паре текущее значение индикатора всегда будет меньще 1000 и условия будут срабатывать на каждом баре

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


Вы ему лучше объясните какие клавиши нажимать.. :)
 

Да вот еще что

4. 12 раз вызывать пользовательский индикатор это как минимум кащунство :)

в вашем случае будет достаточно и 6 раз (я насчитал именно столько)

скорость обработки вашего эксперта выростит ну не в 2 раза но в 1.5 думаю точно только вот от этих действия (оптимизация кода), не путать с оптимизацией параметров


//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//|                                   обработал напильником olyakish |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
extern double lot=1;
extern string rem01="Профит в пунктах от текущей цены";
extern int TP=100;
 
int time;
double WATR[2,3];// первое измерение - индекс буфера; второе измерение - индекс бара 
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int tiket=0;
 
   if (Time[1]!=time)
      {
         WATR[0,0]=iCustom( NULL, 0, "WATR", 0, 0);
         WATR[1,0]=iCustom( NULL, 0, "WATR", 1, 0);
         WATR[0,1]=iCustom( NULL, 0, "WATR", 0, 1);
         WATR[1,1]=iCustom( NULL, 0, "WATR", 1, 1);
         WATR[0,2]=iCustom( NULL, 0, "WATR", 0, 2);
         WATR[1,2]=iCustom( NULL, 0, "WATR", 1, 2);         
         Print("WATR1=",WATR[0,0]);
         Print("WATR2=",WATR[1,0]);
    
         if (WATR[0,2]>0 && WATR[1,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3,WATR[0,0],Bid+TP*Point,NULL,16384,0,Green);
            }
         if (WATR[1,2]>0 && WATR[0,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,WATR[1,0],Ask-TP*Point,NULL,16384,0,Red);                           
            }
         CheckOrders();
         time=Time[1];
      }
   return(0);
  }
//+------------------------------------------------------------------+
void CheckOrders()
   {
      int pos=0;
      int total=OrdersTotal();
      for (pos=0;pos<total;pos++) 
         {
            if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
               { 
                  if (OrderType()==OP_BUY && OrderStopLoss()<WATR[0,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[0,1],OrderTakeProfit(),0,Green);}
                  if (OrderType()==OP_SELL && OrderStopLoss()>WATR[1,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[1,1],OrderTakeProfit(),0,Red);}
               }
         }
      return(0);  // на самом деле нужно просто return но так вроде писать нельзя ...
    }
//+------------------------------------------------------------------+

Хотя бы так

Проверяйте



 
К сожалению не работает
 

Ктонибудь может объяснить

Есть два едентичных советника с абсалютно едентичными параметрами

Один покупает другой в ето же время продает

момент входа и выхода у них одинаков

Как они могут оба слиться вчистую ?

 
Ultramarin:

Как они могут оба слиться вчистую ?

По спреду
Причина обращения: