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

 
Roman.:

Ребята, подскажите, почему может быть ошибка о невозможности открытия индикатора в эксперте?

Это условие выполняется:

-Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора.


Надо бы имя индикатора сверить. Всяко может быть
 
Vinin:

Надо бы имя индикатора сверить. Всяко может быть


Имя сверил. В порядке. Разбираюсь...

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

 
О гуру MQL программирования, помогите новичку разобраться с делемой. Программа работает некорректно, не выполняет тех действий, которые от нее требуются. Подскажите в чем моя ошибка? Программе необходимо:
1. Открыть ордер и присвоить переменной PriceBuy значение цены открытия ордера и выдать об этом сообщение, с этим вроде как справляется.
2. Открыть новый ордер, с теми же условиями, при достижении TakeProfit.
Вот код программы:

extern double PriceBuy = 0;
extern bool Buy = true;
extern bool number = false;

int start()
{
if(Buy)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-100*Point,Bid+100*Point);
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
PriceBuy=OrderOpenPrice();
Alert("Цена покупки = ",PriceBuy);
Buy = false;
number = true;}

if (Bid+100*Point<=PriceBuy && number)
{PriceBuy = 0;
number = false;
Buy=true;}


return;
}
Заранее благодарен
 
OTPOK:

О гуру MQL программирования, помогите новичку разобраться с делемой. Программа работает некорректно, не выполняет тех действий, которые от нее требуются. Подскажите в чем моя ошибка? Программе необходимо:
1. Открыть ордер и присвоить переменной PriceBuy значение цены открытия ордера и выдать об этом сообщение, с этим вроде как справляется.
2. Открыть новый ордер, с теми же условиями, при достижении TakeProfit.
Вот код программы:

extern double PriceBuy = 0;
extern bool Buy = true;
extern bool number = false;

int start()
{
if(Buy)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point);
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
PriceBuy=OrderOpenPrice();
Alert("Цена покупки = ",PriceBuy);
Buy = false;
number = true;}

if (Bid+100*Point<=PriceBuy && number)
{PriceBuy = 0;
number = false;
Buy=true;}


return;
}
Заранее благодарен

Bid>=PriceBuy+100*Point
 

Хочу подключить функцию CreateNamedPipe() из kernel32.dll. Нужно прописать флаги типа Dword.

Делаю так:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Естественно компилятор ругается на буковку L в конце. Подскажите как быть?

 
Vinin:

Надо бы имя индикатора сверить. Всяко может быть


Да, действительно, Виктор, ошибка была в том, что обращался на автомате... :-))) к индикатору через

...
string short_name;
...
short_name="NonLagMA";
IndicatorShortName(short_name);
...

... вследствие чего и было не соответствие "короткого" имени и "обычного" при обращении к значениям индикатора через iCustom(), т.е. при их не совпадении обращение к индикатору должно производиться только по его "обычному" имени.

Благодарю Вас.

 

Здравствуйте.

Помогите, пожалуйста, найти ошибку.

Код предназначен для закрытия всех позиций при пересечении ценой линии, нарисованной на графике. В большинстве случаев так и происходит. Но периодически бывают 2 глюка: 1. Цена пересекает линию, но позиции не закрываются. 2. Линия пересекает текущий ценовой уровень (под углом), но по времени с ним не совпадает (не задевает текущую свечу), при этом происходит закрытие всех позиций (чего не должно быть).

int start() {
//============== Закрытие по линии Close ========================================
   int bar1,bar2,bar3;
   if (Draw_Close && ObjectFind("LINES CLOSE")==-1)
   {
      bar3 = searcFR(0,1);bar2 = searcFR(bar3,-1);bar1 = searcFR(bar2,1);
      drawline("LINES CLOSE",Color_Close,Time[bar1],High[bar1]+15*Point,Time[bar3],High[bar3]+15*Point);
   }
   string order = checkapp();
   if (order=="LINES CLOSE")
   {DeleteAllOtlozh_b();
    CloseAll_b(DeleteOtlozh,Proskalz);
    ObjectDelete("LINES CLOSE");
    ObjectDelete("LINES CLOSE n");
    Draw_Close  = false;
    if(UseAlert){
    Alert("Уровень достигнут, заблокирован");
    } 
   } 
}     
//==================================================================================


//=========== Вычисление линии Close  =================================================================
int searcFR(int bar, int UP_DN)
{  while(true)//ищем 1 фрактал после bar
   {  bar++;
      if (Fractal(bar) == UP_DN) return(bar);} 
   return(0);  
}
//--------------------------------------------------------------------------
int Fractal(int br)
{  if (br <= 2) return(0);
   if (High[br] >= High[br+1] && High[br] > High[br+2] && High[br] >= High[br-1] && High[br] > High[br-2]) return( 1);
   if (Low [br] <= Low [br+1] && Low [br] < Low [br+2] && Low [br] <= Low [br-1] && Low [br] < Low [br-2]) return(-1);
   return(0);
}
//-------------------------------------------------------------------
int drawline(string Name, color col,int X1,double Y1,int X2,double Y2)
{
   if (ObjectFind(Name)==0)return; //Если обьект существует
   int X1g=Time[0];
   int X2g=Time[0]+Period()*1200;
   double Y1g=Y1+(Y2-Y1)*(X1g-X1)/(X2-X1);
   double Y2g=Y1+(Y2-Y1)*(X2g-X1)/(X2-X1);
   ObjectCreate(Name, OBJ_TREND, 0,X1g,Y1g,X2g,Y2g);
   ObjectSet   (Name, OBJPROP_COLOR, col);
   ObjectSet   (Name, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet   (Name, OBJPROP_WIDTH, 2);
   ObjectSet   (Name, OBJPROP_BACK,  false);
   ObjectSet   (Name, OBJPROP_RAY,   false);
   return;
}
//----------------------------------------------------------------------- проверка всех линий
string checkapp()
{
   int X_1,X_2,X_3;
   double Y_1,Y_2,Y_3;
   double shift_Y = (WindowPriceMax()-WindowPriceMin()) / 50;
   color col;
   for(int n=ObjectsTotal()-1; n>=0; n--) 
   {
      string Obj_N=ObjectName(n);
      if (ObjectType(Obj_N)!=OBJ_TREND) continue;
      if (StringFind(Obj_N,"LINES ",0)!=-1)//найден обьект-тренд к которому вычисляется приближение
      {
         X_1 = ObjectGet(Obj_N, OBJPROP_TIME1); 
         X_2 = ObjectGet(Obj_N, OBJPROP_TIME2); 
         ObjectDelete (Obj_N+" n");
         if (X_1>X_2 ||  X_2<Time[0]) {continue;}//ObjectDelete(Obj_N);
         Y_1 = ObjectGet(Obj_N, OBJPROP_PRICE1);
         Y_2 = ObjectGet(Obj_N, OBJPROP_PRICE2);
         col= ObjectGet(Obj_N, OBJPROP_COLOR);
         ObjectCreate (Obj_N+" n", OBJ_TEXT,0,X_1-Period()*60,Y_1+shift_Y,0,0,0,0);
         ObjectSetText(Obj_N+" n",StringSubstr(Obj_N,6,5) ,7,"Arial");
         ObjectSet    (Obj_N+" n", OBJPROP_COLOR, col);
         if (X_1<=Time[0] && X_2>=Time[0])//попадает во временной диапазон
         {
            X_3=Time[0];Y_3=Y_1+(Y_2-Y_1)*(X_3-X_1)/(X_2-X_1);//уравнение прямой
            if (Y_3>=Bid&&Y_3<=Ask)
            { 
               return(Obj_N);
            }
         }
      }
   }
}

Заранее благодарю.

 
nemo811:

Помогите, пожалуйста, найти ошибку.

Вопрос снимаю, разобрался.

 
toropchin:

Хочу подключить функцию CreateNamedPipe() из kernel32.dll. Нужно прописать флаги типа Dword.

Делаю так:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Естественно компилятор ругается на буковку L в конце. Подскажите как быть?

Zhunko:

Убрать разряд. Там может быть только 8 разрядов. MQL4 с большим не работает.

Надо убрать ноль лишний. Попробуйте так: 0x1000000L


Не получается так. Компилятор выдаёт ошибку '0x1000000L' - invalid number
 
toropchin:

Не получается так. Компилятор выдаёт ошибку '0x1000000L' - invalid number

Совсем ночью не соображаю... :-)) Такой цифры в 16-ричной системе нет. Это идентификатор типа константы.

L убрать надо: 0x01000000