[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 403

 
mersi:
загрузите историю и отпадет вопрос

А как ее загрузить?
 
kolyango:

Я правильно понимаю:

Конкретная реализация очень тесно завязана на ваши условия.

Флаг это просто переменная в которой хранится состояние. Грубо говоря он может быть поднят или опущен. Отталкивайтесь от этого и реализуйте свою логику.

 
w_ersoc:

подскажите, как правильно написать условие что бы эксперт срабатывал 1 раз с открытием нового бара указанного таймфрейма? :(

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

int start()
static datetime dtBar;
//.................
if(Time[0]==dtBar) return(0);//…проверим открытие новой свечи
dtBar=Time[0]; //(тот же Бар-возврат)(новый-продолжение...)
// 
 
splxgf:

Конкретная реализация очень тесно завязана на ваши условия.

Флаг это просто переменная в которой хранится состояние. Грубо говоря он может быть поднят или опущен. Отталкивайтесь от этого и реализуйте свою логику.


Ну а смысл я правильно описал?

Я правильно понимаю:

1. если условие1 выполнено, то флагу Флаг_СССР1 присваивается истинное значение и сразу дальше начинаем проверять условие2

2. если условие2 выполнено, то флагу Флаг_СССР2 присваивается истинное значение, а если нет то фальшивое и при следующем тике

условие1 уже не проверяем, а переходим сразу к условию2 и так до тех пор пока не будет выполнено условие2 и ему не присвоится истинное значение

3. дальше проверяем условие3 и Флаг_СССР2 (а что именно в СССР2 проверяем истинно или фальшиво; или что?)

Так правильно будет? В тестере не одной сделки... Хотя должны быть если правильно. Что неправильно...?

static bool Val_max, Cl_dn, Val_min; //static or global
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                      // Номер ордера
   Total=0,                                     // Количество ордеров в окне
   Tip=-1;                                      // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                          // SL выбранного ордера
   TP,                                          // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[0];                             // Цена откр. формирующегося бара
   ask=Ask;                                    // Текущая цена покупки
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb;                                        // Название финанс. инструмента
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1= Open[1];
double Close_1= Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max) Val_max=true;                  // 
if (Open_1 > Close_1) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }

   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 

Привет!

Я задался целью лимитирования одновременно открытых позиций до 1.

С помощью переменной Open/Close level = 3/2 помноженных на Point, помещенных в условия открытия/закрытия позиций я попытался решить эту задачу, но не преуспел.

Помогите пожалуйста разобраться :)

 
kolyango:


Так правильно будет? В тестере не одной сделки... Хотя должны быть если правильно. Что неправильно...?

А теперь еще разик полностью распишите условия на нормальном языке и можно будет поправить код... По хорошему сигналы должны иметь срок действия и отмену.
 
skyjet:

Привет!

Я задался целью лимитирования одновременно открытых позиций до 1.

if (OrdersTotal()>0) return;

или разновидности с учетом символа и выкидывающие отложенники.

 

то есть в моем варианте

if(OrdersTotal()>1)return;

?

 
splxgf:
А теперь еще разик полностью распишите условия на нормальном языке и можно будет поправить код... По хорошему сигналы должны иметь срок действия и отмену.

Все эти условия могут не следовать сразу одно за другим (может через час или два или три), поэтому нужно сделать так, чтобы как только значение индикатора достигнет 1.0000, это условие больше не проверялось при каждом тике, а ждать пока закроется один бар падением, а после этого эти 2 условия не проверялись при каждом тике, а ждать пока значение индикатора станет меньше или равно 0.9980. Как только все условия будут выполнены открываем рыночный ордер на продажу 0.1 лота со стоп-лоссом 400п. и тейк-профитом 400п.
 
skyjet:

то есть в моем варианте

if(OrdersTotal()>1)return;

?

Лучше все же первый вариант, размещать перед попыткой открытия ордера (OrderSend)
Причина обращения: