[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 116

 
Roman.:

伙计们,你们能告诉我为什么可能出现无法在EA中打开指标的错误吗?

这一条件得到满足。

-参数列表(如有必要)。传递的参数必须与自定义指标的外部(extern)变量的声明顺序和类型一致。


你应该检查该指标的名称。 这可能是
 
Vinin:

我将不得不检查指标名称。 我不知道它可能是什么。


我检查了这个名字。没关系的。想明白了...

P.S. 我建立了一个五位数的DC终端,把所有东西都搬到那里,再次仔细检查了所有东西,编辑了很多代码,不再出现这样的错误。

 
O 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("Buy Price = ",PriceBuy);
Buy = false;
number = true;}。

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


return;
}
提前感谢
 
OTPOK:

O MQL编程大师们,请帮助一个新人解决一个问题。该程序不能正常工作,它没有做它应该做的事。你能告诉我我的错误是什么吗?该方案需要。
1.打开一个订单,将开盘价值分配给PriceBuy变量,并显示相关信息。
当达到TakeProfit时,以同样的条件 开立一个新的订单
以下是程序代码。


外来的双倍PriceBuy = 0;
外部bool Buy = true。
外部的bool number = false。

int start()
{
如果(购买)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point) 。
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
PriceBuy=OrderOpenPrice()。
Alert("Buy Price = ",PriceBuy);
购买 = false。
number = true;}

如果(Bid+100*Point<=PriceBuy&& number)
{PriceBuy = 0;
number = false;
购买=true;}


返回。
}
预先感谢

出价>=买价+100*点数
 

我想从kernel32.dll连接CreateNamedPipe()函数。我需要开出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:

我想从kernel32.dll连接CreateNamedPipe()函数。我需要开出Dword类型的标志。

我是这样做的。

#define ACCESS_SYSTEM_SECURITY 0x01000000L

自然地,编译器在结尾处对L发了誓。你有什么建议?

竺可桢

删除数字。只能有8位。MQL4对大的不适用。

你需要删除一个额外的零。像这样试试:0x1000000L


它不是这样工作的。编译器给出错误'0x1000000L' - 无效数字
 
toropchin:

它并不像那样工作。编译器产生错误'0x1000000L' - 无效数字

晚上根本不思考...:-))在16位系统中没有这样的数字。它是一个常量类型的标识符。

L应被删除:0x01000000