任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1092

 
重新安装操作系统。重装操作系统后,如何将MT4恢复到重装前的状态。
指标、EA、脚本;模板、简介;账户
 
AlexandrL:
重新安装操作系统。重装操作系统后,如何将MT4恢复到重装前的状态。
指标、专家顾问、脚本;模板、简介;账户
在重新安装之前,将终端的文件夹复制到一个闪存盘上。如果版本是7或更高,那么共享文件夹也是如此。更多详情请见这里
 

下午。

一个基于箭头指标的顾问。

在上分形 上卖出,在下分形上买入。在工作中最大。1个订单。但在某处出现了错误,因为专家顾问没有考虑到分形,只在买入时打开。或者根本就打不开(如果我们在iCustom中改变偏移量)。我曾试图在专家顾问中插入一个不同的条件(在箭头的交叉点)。一切正常,但它没有从箭头指示器中获取数据。

指标。

//+------------------------------------------------------------------+
//|                                                   MI_Fractal.mq4 |
//|                                                     Орешкин А.В. |
//|                                        http://www.vk.com/mtforex |
//+------------------------------------------------------------------+
#property copyright "Орешкин А.В."
#property link      "http://www.vk.com/mtforex"

#property indicator_chart_window
#property indicator_buffers 2
#property  indicator_color1 Aqua
#property  indicator_color2 Yellow
#property  indicator_width1 2
#property  indicator_width2 2

//--- input parameters
extern int       leftBars=10;
extern int       rightBars=2;
extern int       difference=10;
//extern int       maximumBars=1000;
extern bool      showUp=true;
extern bool      showDown=true;

bool  UP_Fractal,DOWN_Fractal;
double DEF,up[],down[];

int init()
  {
   DEF=NormalizeDouble(difference*Point,Digits);
   SetIndexBuffer(0,up);
   SetIndexBuffer(1,down);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);    
   SetIndexArrow(0,217);
   SetIndexArrow(1,218);
   return(0);
  }

int deinit(){return(0);}

int start()
  {   
   //for (int i=maximumBars;i>rightBars;i--)
   for (int i=Bars-IndicatorCounted()-leftBars-1;i>rightBars;i--)   
      {//3
      UP_Fractal=true;DOWN_Fractal=true;
      
      for (int x=i+leftBars;x>=i-rightBars;x--)
         {//0
         if (x==i) continue;
         if (High[i]-High[x]<DEF) UP_Fractal=false;
         if (Low[x]-Low[i]<DEF) DOWN_Fractal=false;
         }//0
      
      up[i]=EMPTY;
      down[i]=EMPTY;
      
      if (showUp)   
         if (UP_Fractal && !DOWN_Fractal) up[i]=High[i];
      
      if (showDown)   
         if (!UP_Fractal && DOWN_Fractal) down[i]=Low[i]; 
      }//3
   return(0);
  }


来自猫头鹰的代码。

double upFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,0,1);
double downFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,1,1); 
     
   if (upFr!=EMPTY_VALUE)   
   //if (upFr<2) 
   //if (upFr>0)    
     {   
                                          
      Alert(upFr); 
      Opn_S=true;                             
      //Cls_B=true;                                
     }
 if (downFr!=EMPTY_VALUE)
   //if (downFr<2)
 //  if (downFr>0)                                              
     {                                         
     Opn_B=true;                              
     //Cls_S=true;                             
     }

已经尝试了各种解决方案,都没有用。请告诉我错误在哪里。

附加的文件:
 

下午好。

帮我找到周二第一根柱子的开盘价,并把它固定下来,这样我就可以用它来计算整个星期。

谢谢你。

 

你好,如果有人能告诉我在这里放什么,使EA在触发后停止打开挂单,我将非常感激。

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir | 版权所有。
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright"Copyright © 2014, cmillion@narod.ru"
#属性链接 "http://cmillion.ru"
#属性严格
#财产描述 "专家顾问在不使用任何指标的情况下对市场涌动进行交易。"
#属性描述 "专家顾问的想法是,止损单在时间上离散地移动,与当前价格有一定距离。"
#属性描述 "如果价格在一个方向上有足够大的波动,EA根本没有时间来移动订单,它就变成了市场订单。"
#property description "then a trall order is triggered".
//--------------------------------------------------------------------
External int Stoploss = 10; // Stoploss, if 0, remain unchanged.
Takeeprofit = 50; //takeprofit,如果是0,保持不变。
外部int TrailingStop = 10; //tramp length, if 0, then no trailing stop
外部int TrailingStart = 0; //什么时候激活一个交易,例如在它达到40点利润之后
外部int StepTrall = 2; //tramp step - 移动StopLoss的距离不超过StepTrall。
外部int NoLoss = 0, //在指定的利润点数上转移到盈亏平衡点,如果是0,则不转移到盈亏平衡点。
MinProfitNoLoss = 0; //转为无损的最低利润。
外来int Magic = 77; //magic
Extern int Step = 10; //与价格的距离。
外置双Lot = 0.1。
外部实习生 TimeModify = 30; //禁止修改订单的秒数。
extern int slippage = 30; //市场订单(买入和卖出订单)的最大允许价格偏差。
//--------------------------------------------------------------------
数据时间 TimeBarB,TimeBarS。
//--------------------------------------------------------------------
int start()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL)。
双重OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0。
int b=0,s=0,TicketB=0,TicketS=0,OT;
for (int i=0; i<OrdersTotal(); i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
如果(OrderSymbol()==Symbol() &&Magic==OrderMagicNumber()
{
OT = OrderType()。
OSL = NormalizeDouble(OrderStopLoss(),Digits)。
OOP = NormalizeDouble(OrderOpenPrice(),Digits)。
SL=OSL。
如果(OT==OP_BUY)
{
b++;
如果(OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits)。
如果(StLo > OSL &&StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits))SL = StLo;
}
如果(TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits)。
如果(StLo>=OOP &&StLo>OSL+StepTrall*Point)SL = StLo;
}
如果(SL > OSL)
{
如果(!OrderModify(OrderTicket(),OOP,SL,TP,0,White))Print("Error",GetLastError(), "Order Modify Buy SL" ,OSL,"->",SL);
else Print("Order Buy Modify SL" ,OSL,"->",SL)。
}
}
如果(OT==OP_SELL)
{
s++;
如果((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits)。
如果((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits) )SL = StLo;
}
如果(TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
如果(StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0))SL = StLo;
}
如果((SL < OSL || OSL==0) && SL! =0)
{
如果(!OrderModify(OrderTicket(),OOP,SL,TP,0,White))Print("Error",GetLastError(), "Order Modify Sell SL" ,OSL,"->",SL);
else Print("Order Sell Modify SL" ,OSL,"->",SL)。
}
}
如果(OT==OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}。
如果(OT==OP_SELLSTOP){PriceS=OOP; TicketS=OrderTicket();}。
}
}
}
如果(b+TicketB==0)
{
如果(Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
如果(Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
如果(OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slipage,SL,TP, "news",Magic,0,CLR_NONE)!=-) TimeBarB=TimeCurrent();
}
如果(s+TicketS==0)
{
如果(Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); 否则SL=0。
如果(Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
如果(OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slipage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent()。
}
如果(TicketB!=0)
{
如果(TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
如果(Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
如果(Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
如果(OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE))TimeBarB=TimeCurrent()。
}
}
如果(TicketS!=0)
{
如果(TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
{
如果(Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); 否则SL=0。
如果(Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
如果(OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE))TimeBarS=TimeCurrent()。
}
}
return(0);
}
//--------------------------------------------------------------------

附加的文件:
 
yaaarik777:

下午好。

帮我找到周二第一根柱子的开盘价,并把它固定下来,这样我就可以用它来计算整个星期。

谢谢你。

如果(DayOfWeek() == 1) Price = iOpen(Symbol(),PERIOD_D1, 4);
如果(DayOfWeek() >= 2) 价格 = iOpen(Symbol(), PERIOD_D1, DayOfWeek() - 2);

 

看起来像MetaTrader的故障:有没有人在试图输入程序时遇到过挂起的情况?

下面是一个简单的代码

空白的OnInit()

{

...

Print("外部程序")。

StartBuy(Price, Take, Stop, Lot)。

...

}

void StartBuy(double Price, double Take, double Stop, double Lot)。

{

Print("内部程序")。

....

}

它产生了一行外部程序,然后测试器就挂了。它是什么?

 
A13ksandr:

看起来像MetaTrader的故障:有没有人在试图输入程序时遇到过挂起的情况?

下面是一个简单的代码

空白的OnInit()

{

...

Print("外部程序")。

StartBuy(Price, Take, Stop, Lot)。

...

}

停止交易,这就是它的意思。我说过多少次,inite必须有最少的代码,有最快的执行终止,但还是有人懒得看。有标准的预定义函数来运行一个程序。

而inite就像一个int,而不是一个输入,带有终止原因的返回,顺便说一下,我建议这样使用它。

 
Scarick1:

你好,如果有人能告诉我在这里放什么,使EA在触发后停止打开挂单,我将非常感激。

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir | 版权所有。
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#属性链接 "http://cmillion.ru"
#属性严格
#财产描述 "专家顾问在不使用任何指标的情况下对市场涌动进行交易。"
#属性描述 "专家顾问的想法是,止损单在时间上离散地移动,与当前价格有一定距离。"
#属性描述 "如果价格在一个方向上有足够大的波动,EA根本没有时间来移动订单,它就变成了市场订单。"
#property description "then a trall order is triggered".
//--------------------------------------------------------------------
External int Stoploss = 10; // Stoploss, if 0, remain unchanged.
Takeeprofit = 50; //takeprofit,如果是0,保持不变。
外部int TrailingStop = 10; //tramp length, if 0, then no trailing stop
extern int TrailingStart = 0; //什么时候包括trall,例如在达到40个pprofit之后。
外部int StepTrall = 2; //tramp step - 移动StopLoss的距离不超过StepTrall。
外部int NoLoss = 0, //在指定的利润点数上转移到盈亏平衡点,如果是0,则不转移到盈亏平衡点。
MinProfitNoLoss = 0; //转为无损的最低利润。
外来int Magic = 77; //magic
Extern int Step = 10; //与价格的距离。
外置双Lot = 0.1。
外部实习生 TimeModify = 30; //禁止修改订单的秒数。
extern int slippage = 30; //市场订单(买入和卖出订单)的最大允许价格偏差。
//--------------------------------------------------------------------

数据时间 TimeBarB,TimeBarS。

TradingAllowed = true

//--------------------------------------------------------------------
int start()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL)。
双重OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0。
int b=0,s=0,TicketB=0,TicketS=0,OT;
for (int i=0; i<OrdersTotal(); i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
如果(OrderSymbol()==Symbol() &&Magic==OrderMagicNumber()
{
OT = OrderType()。
OSL = NormalizeDouble(OrderStopLoss(),Digits)。
OOP = NormalizeDouble(OrderOpenPrice(),Digits)。
SL=OSL。
如果(OT==OP_BUY)

{

b++;

TradingAllowed = false

如果(OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits)。
如果(StLo > OSL &&StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits))SL = StLo;
}
如果(TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits)。
如果(StLo>=OOP &&StLo>OSL+StepTrall*Point)SL = StLo;
}
如果(SL > OSL)
{
如果(!OrderModify(OrderTicket(),OOP,SL,TP,0,White))Print("Error",GetLastError(), "Order Modify Buy SL" ,OSL,"->",SL);
else Print("Order Buy Modify SL" ,OSL,"->",SL)。
}
}
如果(OT==OP_SELL)
{

s++;

TradingAllowed = false

如果((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits)。
如果((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits) )SL = StLo;
}
如果(TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
如果(StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0))SL = StLo;
}
如果((SL < OSL || OSL==0) && SL! =0)
{
如果(!OrderModify(OrderTicket(),OOP,SL,TP,0,White))Print("Error",GetLastError(), "Order Modify Sell SL" ,OSL,"->",SL);
else Print("Order Sell Modify SL" ,OSL,"->",SL)。
}
}
如果(OT==OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}。
如果(OT==OP_SELLSTOP){PriceS=OOP; TicketS=OrderTicket();}。
}
}

}

如果(b == 0 && s == 0)TradingAllowed = true

如果(b+TicketB==0&& TradingAllowed)
{
如果(Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
如果(Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); 否则TP=0。
如果(OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slipage,SL,TP, "news",Magic,0,CLR_NONE)!=-) TimeBarB=TimeCurrent();
}
如果(s+TicketS==0&& TradingAllowed)
{
如果(Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); 否则SL=0。
如果(Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
如果(OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slipage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent()。
}
如果(TicketB!=0)
{
如果(TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
如果(Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
如果(Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); 否则TP=0。
如果(OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE))TimeBarB=TimeCurrent()。
}
}
如果(TicketS!=0)
{
如果(TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
{
如果(Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); 否则SL=0。
如果(Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
如果(OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE))TimeBarS=TimeCurrent()。
}
}
return(0);
}
//--------------------------------------------------------------------

不知何故...


 
evillive:

Отставить торговать в ините, вот что значит. Сколько уже повторяли что в ините должен быть минимум кода с максимально быстрым завершением исполнения, всё равно найдется кто-нибудь, кому лень читать. Есть же стандартные предопределенные функции для работы программы.

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

对不起!当然,一切都发生在void OnTick()中。我自己写的)