Как получить данные из индюка? - страница 6

 
Retabs:


Буду исправляться. Уже вставил код посредством кнопки SRC.

Почему потом вы удалите мой код ели он, как вы написали, вставленный по правилам?


Потому что вы должны предложить свой код, вставленный по правилам, а не я ваш! Только сейчас удалил, когда вернулся домой!
 
borilunad:

Потому что вы должны предложить свой код, вставленный по правилам, а не я ваш! Только сейчас удалил, когда вернулся домой!


Подскажите пожалуйста. Как разрешить открытие новой сделки только в том случае когда линии индикатора заново пересекутся, то есть после того как val1 не станет равным val2? (код выше). Циклом?

 
Retabs:


Подскажите пожалуйста. Как ограничить открытие одной сделки пока не закроется другая? (код выше).


Перед открытием поставьте условие, если нет позиции, тогда можно открыть!

Есть много разных функций, но пока вы изучите их предлагаю одну дежурную, что на все случаи!

if(OrderTotal() == 0)
{
  // потом остальные условия, чтобы зря не производить расчёты,
  // если пока ещё есть открытая позиция. 
  // Если понадобится открывать больше позиций, тогда проставите
  // допустимый максимум, например, 3 позиции:
if(OrderTotal() < 3)
{
  // Всё это не ленитесь находить в Документации! Замечено, что 
  // если находите сами и сами делаете, тогда ваши знания и навыки
  // будут крепкими!
  
 

borilunad:

Потому что вы должны предложить свой код, вставленный по правилам, а не я ваш! Только сейчас удалил, когда вернулся домой!

Спасибо. Пересмотрел мои условия и осознал что не совсем правильно написал чего хотел. Извините.

Подскажите пожалуйста. Как разрешить открытие новой сделки только в том случае когда линии индикатора заново пересекутся, то есть после того как val1 не станет равным val2? (код выше). Чтобы между 2 пересечениями разрешалась только одна сделка, не зависимо от количества открытых на этот момент прошлых сделок, ну и конечно не трогая их.

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

Думаю единственный выход это поймать момент когда сделка состоялась, и поменять маркер опять на исходное значения.

 
Retabs:


Подскажите пожалуйста. Как разрешить открытие новой сделки только в том случае когда линии индикатора заново пересекутся, то есть после того как val1 не станет равным val2? (код выше). Циклом?


Пока я вам писал, вы прибавили условия, которые хотите видеть написанными мной! Вот тут вы и должны сами найти и написать, что вам нужно, рассматривая в Документации и смотря на ваш график таймсерии, бары-свечи, и углубиться в изучение Учебника Сергея Ковалёва, который в доступной манере всё объясняет!

Так что не теряйте время, беритесь за учение, и результат будет! А на подсказках вы сами себе сделаете медвежью услугу, т.к. даже профессионально написанному советнику всегда нужна няня, без которой он в любой момент закапризничает и перестанет зарабатывать из-за частых смен повадок рынка! Поэтому вы должны всё время искать новые решения, экспериментировать, немного или существенно менять стратегию, и знать сделанное вами гораздо легче чем разбираться в чужом! Успехов вам!

 
borilunad:


Пока я вам писал, вы прибавили условия, которые хотите видеть написанными мной! Вот тут вы и должны сами найти и написать, что вам нужно, рассматривая в Документации и смотря на ваш график таймсерии, бары-свечи, и углубиться в изучение Учебника Сергея Ковалёва, который в доступной манере всё объясняет!

Так что не теряйте время, беритесь за учение, и результат будет! А на подсказках вы сами себе сделаете медвежью услугу, т.к. даже профессионально написанному советнику всегда нужна няня, без которой он в любой момент закапризничает и перестанет зарабатывать из-за частых смен повадок рынка! Поэтому вы должны всё время искать новые решения, экспериментировать, немного или существенно менять стратегию, и знать сделанное вами гораздо легче чем разбираться в чужом! Успехов вам!


Хорошо. Я от справки и не отказываюсь. Подскажите в каком направлении копать чтобы "поймать момент когда сделка состоялась, и поменять маркер опять на исходное значения"
 
Retabs:

Хорошо. Я от справки и не отказываюсь. Подскажите в какое направления копать чтобы "поймать момент когда сделка состоялась, и поменять маркер опять на исходное значения"


таймсерии в Документации, бары-свечи на графике! И много чего узнаете попутно и очень нужного и полезного! И Учебник!

И это не на день-два учения, месяцы и годы, на всё жизнь, если хотите действительно знать и уметь! Желаю удачи!

 
_new-rena:

Наконец то.

Ошибка 130 - это из за стопов и тейков. Там должен быть уровень цены, на котором они должны сработать. (уж всяко не дождаться курса цены -100 или 60, должно быть наподобии Price-100*Point или Price+60*Point, к примеру)


Подскажите пожалуйста. Как разрешить открытие новой сделки только в том случае когда линии индикатора заново пересекутся, то есть после того как val1 не станет равным val2? Чтобы между 2 пересечениями разрешалась только одна сделка, не зависимо от количества открытых на этот момент прошлых сделок, ну и конечно не трогая их.

//+------------------------------------------------------------------+
//|                                Sovetnik_RegressionPolynomial.mq4 |
//|                                                      Retabs 2014 |
//|                                                        www.----- |
//+------------------------------------------------------------------+
#property copyright "Retabs 2014"
#property link      "www.-----"
#property version   "1.00"
#property strict
//--- input parameters
input int   StopLoss=60;
input int   TakeProfit=100;
input double   Lots=0.10;
input int   Shift=5;

double SL;
double TP;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double val1=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,0);
   double val2=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,0);
   
   if(val1>val2)
   OrderSend(Symbol(),OP_BUY, Lots,Ask,Shift,Ask-StopLoss*Point,Ask+TakeProfit*Point,"коммент",5371533,0,Red);
   
   if(val1<val2)
   OrderSend(Symbol(),OP_SELL,Lots,Bid,Shift,Bid+StopLoss*Point,Bid-TakeProfit*Point,"коммент",5371533,0,Blue);
  }
//+------------------------------------------------------------------+
 
Retabs:


Подскажите пожалуйста. Как разрешить открытие новой сделки только в том случае когда линии индикатора заново пересекутся, то есть после того как val1 не станет равным val2? Чтобы между 2 пересечениями разрешалась только одна сделка, не зависимо от количества открытых на этот момент прошлых сделок, ну и конечно не трогая их.

Вот так
void OnTick()
  {
//---
   double val10=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,0);
   double val20=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,0);

   double val11=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,1);
   double val21=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,1);
   
   if(val11 < val21 && val10>=val20)
   OrderSend(Symbol(),OP_BUY, Lots,Ask,Shift,Ask-StopLoss*Point,Ask+TakeProfit*Point,"коммент",5371533,0,Red);
   
   if(val11 > val21 && val10<=val20)
   OrderSend(Symbol(),OP_SELL,Lots,Bid,Shift,Bid+StopLoss*Point,Bid-TakeProfit*Point,"коммент",5371533,0,Blue);
  }
 

Спасибо за ответ. Как раз сейчас и я сам придумал решения, но по другому принципу. Попробовал мой, и ваш, вроде правильно.

//+------------------------------------------------------------------+
//|                                Sovetnik_RegressionPolynomial.mq4 |
//|                                                      Retabs 2014 |
//|                                                        www.----- |
//+------------------------------------------------------------------+
#property copyright "Retabs 2014"
#property link      "www.-----"
#property version   "1.00"
#property strict
//--- input parameters
input int   StopLoss=100;
input int   TakeProfit=160;
input double   Lots=0.10;
input int   Shift=5;

double SL;
double TP;
int    X=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double val1=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,0);
   double val2=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,0);
   

   if (X>0 && val1==val2)
   Ctrl=0;
   
   
    if (X==0  )
      {
      if(val1>val2)
      OrderSend(Symbol(),OP_BUY, Lots,Ask,Shift,Ask-StopLoss*Point,Ask+TakeProfit*Point,"коммент",5371533,0,Red);
      Ctrl=Ctrl+1;
      }
      
    if (X==0 ) 
    
      {if(val1<val2)
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Shift,Bid+StopLoss*Point,Bid-TakeProfit*Point,"коммент",5371533,0,Blue);
      X=X+1;
      }
   
  }
//+------------------------------------------------------------------+

Но тут такая штука: в визуальной точке пересечения, на самом деле линии пересекаются больше чем один раз, соответственно сигнал поступает несколько раз, и советник успевает выставить по 4-30 ордеров.

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

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