Всем привет! помогите пож. решить проблему.

 

Всем привет! помогите пож. решить проблему.
Вставил графический индикатор в эксперт. Индикатор рисует границы канала по ценам предыдущего дня.
Мне же необходимо снять и задать значения верхней и нижней границ канала на ТЕКУЩЕМ БАРЕ
Никак не получается. Хотя эксперт сам рисует канал на графике.
Пож., подскажите....

//+------------------------------------------------------------------+
//| *************.mq4
//| ********
//| http://www.***********.ru/
//+------------------------------------------------------------------+
#property copyright "**********"
#property link "*****************"

extern string _= " Общие Параметры ";
extern int Magic =96784;
extern bool Long =true; //выключатель длинных сделок
extern bool Short =true; //выключатель коротких
extern int Orders_=2; // Количество одновременно открытых позиций
extern double Lots=0.1;
extern int TP=100;
extern int SL=145;
extern int Delta =5; // величина расхождения
extern string _______= " Параметры блока ММ";
extern bool MoneyManagement=false;
extern int MarginPercent=2;
//-------------------------------------
extern string ____________= "Параметры Трейлинг стопа";
extern bool UseTrailing = false;//выключатель трала
extern int lMinProfit = 50;//порог начала работы трала длинных позиций
extern int sMinProfit = 60;//порог начала работы трала коротких позиций
extern int lTrailingStop = 50;//размер трала длинных позиций
extern int sTrailingStop = 60;//празмер трала коротких позиций
extern int lTrailingStep = 5;// шаг трала
extern int sTrailingStep = 5;// шаг трала
//-----------------------------------
//-- Подключаемые модули --
#include <stdlib.mqh>
//-------------------
int Slippage=3;
int ticket;
int m,n;
int RRRR_;
int ExpertBars;
static int prevtime = 0;
datetime TimeBar;
//*********************************************************************
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {ExpertBars = Bars; return(0); }
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() { return(0); }
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----- Вывод информации на экран -----------------------------------------
string info="";
string on_off="---------------------------------------------------"+ "\r\n";
if ( Long)on_off=StringConcatenate (on_off," Версия Long - включена. ", "\r\n");
else on_off=StringConcatenate (on_off,"Версия Long - отключена. ","\r\n");
if (Short) on_off=StringConcatenate (on_off,"Версия Short - включена. ","\r\n");
else on_off=StringConcatenate (on_off,"Версия Short - отключена. ","\r\n");
info=StringConcatenate(info,on_off,"\r\n");
info=StringConcatenate(info,"\r\n");
Comment(info);
if(Time[0] == prevtime) return(0);
prevtime = Time[0];//если появился новый бар, включаемся
//-------------------------------------------------------------------+
if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)>0 &&
AccountFreeMarginCheck(Symbol(),OP_SELL,Lots)>0
&& IsTradeAllowed()==true )
{//если размер депозита позволяет нам открыть позицию
// и торговый поток свободен
//-------------------------------------------------------------------+
if (UseTrailing) TrailPositions(); //трейлинг стоп
if (NumberOfPositions(NULL,-1,-1)< Orders_) {// если оtкрытых позиций менее Orders_
Indikator();
Print("Ошибка открытия ордера BUY #",GetLastError());return (0);}
//ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ блок открытия позиций ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ

//------- задаем значения линий-----------------------
/* double target1 = ObjectSet("LRegression",OBJPROP_TIME1,time1);
double target2 = ObjectSet("LRegression",OBJPROP_TIME2,time2);
*/


//===== Ищем возможность войти в рынок ==========================================
/*
//---------проверяем условие на покупку----------------------------
if ( Long) { //если "выключатель" включен
if (NumberOfPositions(NULL,OP_BUY,Magic)< 1) {// если нет окрытых OP_BUY позиций
if (! NumberOfBarOpenLastPos(NULL,0,OP_BUY, Magic) ==0) {//запрет неск. сделок на 1 баре
if ( //задаем значения цены и индикаторов
)
{//Покупаем
ticket=OrderSend(Symbol(),0,Lots,Ask,Slippage,Bid-SL*Point,
Ask+TP*Point, NULL,Magic,0,Blue);
if(ticket < 0) {
{Print("Ошибка открытия ордера BUY #",GetLastError());return (0);}
Sleep(10000);// Вот здесь сбрасываем флаг сформировавшегося бара,
// чтобы на следующем тике, а не на следующем баре,
prevtime = Time[1]; }// опять повторить операцию
}}}}
//--------проверяем условие на продажу------------------------------
if (Short) { //если "выключатель" включен
if (NumberOfPositions(NULL,OP_SELL, Magic)< 1) {// если нет окрытых OP_SELL позиций
if (!NumberOfBarOpenLastPos(NULL, 0,OP_SELL, Magic) ==0) {//запрет неск. сделок на 1 баре
if (//задаем значения цены и индикаторов
)
{//Продаем
ticket=OrderSend(Symbol(),1,Lots,Bid,Slippage,Bid+SL*Point,
Bid-TP*Point,NULL,Magic,0,Red);
if(ticket < 0) {
{Print("Ошибка открытия ордера SELL #",GetLastError());return (0);}
Sleep(10000);// Вот здесь сбрасываем флаг сформировавшегося бара,
// чтобы на следующем тике, а не на следующем баре,
prevtime = Time[1]; }// опять повторить операцию
}}}}
//-----------------------------------------------------------------
} //// если оtкрытых позиций менее Orders_
//ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Конец блока открытия позиций ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ

*/


}//если размер депозита позволяет нам открыть позицию

return(0);
}// Конец функции INT START()
//ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ

void TrailPositions() //пороговый трейлинг стоп
{ int Orders_ = OrdersTotal();
for (int i=0; i<Orders_; i++) {
if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if (OrderSymbol() != Symbol() && OrderMagicNumber()==Magic) continue;
if (OrderType() == OP_BUY) {
if (Bid-OrderOpenPrice() > lMinProfit*Point) {
if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point,
OrderTakeProfit(), 0, Blue);
}}}
if (OrderType() == OP_SELL) {
if (OrderOpenPrice()-Ask > sMinProfit*Point) {
if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point ||
OrderStopLoss() == 0) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point,
OrderTakeProfit(), 0, Blue);
}}}}}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает номер бара открытия последней позиции или -1. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//| op - операция ( -1 - любая позиция) |
//| mn - MagicNumber ( -1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersTotal();

if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) t=OrderOpenTime();
}} } } } }
return(iBarShift(sy, tf, t, True));
}
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru/ |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает количество позиций. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), kp=0;

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
}}}}}
return(kp);
}
//ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ

void Indikator() {
if (Time[0]!=TimeBar)
{
TimeBar=Time[0];
int bar=iBarShift(NULL,PERIOD_D1,TimeBar);
datetime time1=iTime(NULL,PERIOD_D1,bar+1);
datetime time2=iTime(NULL,PERIOD_D1,bar);
int day=TimeDayOfWeek(time1);
if (day==0 || day==6)
{
time1=iTime(NULL,PERIOD_D1,bar+2);
time2=iTime(NULL,PERIOD_D1,bar+1);
}
if (ObjectFind("LRegression")==-1)
{
ObjectCreate("LRegression",OBJ_REGRESSION,0,time1,0,time2,0);
ObjectSet("LRegression",OBJPROP_RAY,true);
}
else
{
ObjectSet("LRegression",OBJPROP_TIME1,time1);
ObjectSet("LRegression",OBJPROP_TIME2,time2);
}
}
return(0);
}











 

Ну прям не знаете (

Молчите как партизаны (((

Война давно закончилась...

 

У тебя эксперт отрисовывает канал по временным точкам. Вставленной функцией void Indikator()

Возможно, проще будет сначала найти значение средней линии канала на текущем баре?

К сож. я тоже не знаю, как это сделать. Но предполагаю, что это проще...

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

Наверное так твоя просьба будет выглядеть корректнеее.

 

линии есть, значит нужно корректированное внутри бара значение,
вот здесь:

'Функции ObjectGetValue_ByCurrent .....Delta_ByCurrent .....Delta_ByTimeShift .....Delta_PerBar'

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