如何编码? - 页 291 1...284285286287288289290291292293294295296297298...347 新评论 dipu 2012.02.25 19:25 #2901 最后一个蜡烛的细节 你好。 需要一个指标来显示最后一根蜡烛的高点、低点、开盘和收盘值... [删除] 2012.02.27 15:43 #2902 mladen: 那为什么不使用跟踪止损呢?我的意思是,它几乎可以做到你原来想法的100%(几乎),而且它的代码要容易得多。 问题是(我不认为我的措辞是正确的,或者说不是100%正确的),止损点(无论如何现在)在整个交易过程中都将保持不变。这样的方法如何,当两笔交易打开时,代码可以检查未结订单的数量,如果它高于1(基本上是2),那么这两笔交易的止损 就会被修改为比以前高的某个数额。从本质上讲,这里有某种对冲作用。 谢谢。 madmax3 Fabian Gryn 2012.02.27 16:16 #2903 [langtitle=pl]Proszę o pomoc w napisaniu EA działającego n[/langtitle] 。 [lang=pl]我想说的是,我们的问题是,为什么要把我们的问题归结为一个问题呢? #define SIGNAL_NONE 0 #define SIGNAL_BUY 1 #define SIGNAL_SELL 2 #define SIGNAL_CLOSEBUY 3 #define SIGNAL_CLOSESELL 4 #property copyright "Expert Advisor Builder" #property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/" 外部int MagicNumber = 0; extern bool SignalMail = False; 外部 bool EachTickMode = True; 外置双数 Lots = 0.1; extern int Slippage = 1; 外部 bool UseStopLoss = True; 外置 int StopLoss = 10; 外部 bool UseTakeProfit = True; 外置 int TakeProfit = 5; 外部 bool UseTrailingStop = False; extern int TrailingStop = 30; extern int LevelRSIbuy=20; extern int LevelRSIsell=80; int BarCount; int Current; bool TickCheck = False; //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int init() { BarCount = Bars; 如果(EachTickMode)Current = 0;否则Current = 1。 return(0); } //+------------------------------------------------------------------+ //| 专家去初始化功能| //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| 专家启动功能| //+------------------------------------------------------------------+ int start() { int Order = SIGNAL_NONE; int Total, Ticket; double StopLossLevel, TakeProfitLevel; 如果(EachTickMode && Bars != BarCount) TickCheck = False; Total = OrdersTotal(); 订单 = SIGNAL_NONE; //+------------------------------------------------------------------+ //| 变量开始 | //+------------------------------------------------------------------+ double Var1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); double Buy1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); double Sell1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); //+------------------------------------------------------------------+ //|变量结束 | //+------------------------------------------------------------------+ //检查头寸 bool IsTrade = False; for (int i = 0; i < Total; i ++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。 如果(OrderType() <= OP_SELL && OrderSymbol() == Symbol() ) { IsTrade = True。 如果(OrderType() == OP_BUY){ //关闭 //+------------------------------------------------------------------+ //| 信号开始(退出买入)| //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 信号结束(退出买入)| //+------------------------------------------------------------------+ 如果(Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){ OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen)。 if (SignalMail) SendMail("[信号提示]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy"); if (!EachTickMode) BarCount = Bars; IsTrade = False; 继续。 } //拖曳止损 if(UseTrailingStop && TrailingStop > 0) { if(Bid - OrderOpenPrice() > Point * TrailingStop) { 如果(OrderStopLoss() < Bid - Point * TrailingStop) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) 。 if (!EachTickMode) BarCount = Bars; 继续。 } } } } else { //关闭 //+------------------------------------------------------------------+ //| 信号开始(退出卖出)| //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 信号结束(退出卖出)| //+------------------------------------------------------------------+ 如果(Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){ OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange)。 如果(SignalMail) SendMail("[信号警报]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell"); if (!EachTickMode) BarCount = Bars; IsTrade = False。 继续。 } //拖曳止损 if(UseTrailingStop && TrailingStop > 0) { if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { 如果((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) 。 if (!EachTickMode) BarCount = Bars; 继续。 } } } } } } //+------------------------------------------------------------------+ //| Signal Begin(Entry) | //+------------------------------------------------------------------+ if (False) Order = SIGNAL_BUY; 如果 (False) 订单 = SIGNAL_SELL; //+------------------------------------------------------------------+ //| 信号结束 | //+------------------------------------------------------------------+ //买入 如果(Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){ if(!IsTrade) { //检查自由保证金 如果(AccountFreeMargin() < (1000 * Lots)) { Print("我们没有钱。Free Margin = ", AccountFreeMargin())。 return(0); } if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0; if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0; Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue) 。 如果(Ticket > 0) { 如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) { Print("BUY订单打开:", OrderOpenPrice())。 if (SignalMail) SendMail("[信号提示]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy"); } else { Print("打开买入订单出错。", GetLastError())。 } } if (EachTickMode) TickCheck = True; 如果(!EachTickMode) BarCount = Bars; return(0); } } //卖出 如果(Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){ if(!IsTrade) { //检查自由保证金 如果(AccountFreeMargin() < (1000 * Lots)) { Print("我们没有钱。Free Margin = ", AccountFreeMargin())。 return(0); } if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0; if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0。 Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink) 。 如果(Ticket > 0) { 如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) { Print("Sell order opened : " , OrderOpenPrice()); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell")。 } else { Print("错误打开卖出订单。", GetLastError())。 } } if (EachTickMode) TickCheck = True; 如果(!EachTickMode) BarCount = Bars; return(0); } } 如果(!EachTickMode) BarCount = Bars; return(0); } //+------------------------------------------------------------------+[/lang] 问吧! ICustom函数 基本问题... [删除] 2012.03.03 09:18 #2904 我想用这段代码来增加未平仓交易的获利(如果他们有两个未平仓交易)。 if(total>2) if(OrderType()==OP_BUY) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue); if(OrderType()==OP_SELL) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue); total=OrdersTotal(); btw. 但我还是不能让它工作,有什么建议吗? 谢谢。 madmax3 dresolo1 2012.03.03 18:24 #2905 帮助限制每日交易的数量为1 我是编程新手,在MQL4中需要帮助。我已经研究了一些编码指南,并且知道了如何根据我的交易策略打开和关闭交易。我的困难是把每天的交易数量限制在1个。我希望每天的交易不超过1个(根据服务器时间)。所以我想检查 开仓和平仓的订单,看看今天是否有订单被打开。如果今天有订单被打开,那么当天就不要再打开任何其他订单。 请帮助。 Mladen Rakic 2012.03.04 11:27 #2906 试试这样的方法。 bool uniqueOnDay() { datetime startTime = iTime(NULL,PERIOD_D1,Time[0]); datetime endTime = startTime+24*60*PERIOD_D1; for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != MagicNumber) continue; if (OrderOpenTime()endTime) continue; return(false); } return(true); } 它是在检查当前符号的任何已关闭的订单是否在当天被打开。如果当日有订单被打开,则返回false(当日已经有订单被打开),否则返回true(当日没有订单被打开)。它不检查当前打开的订单(只检查历史记录),因为我认为你不希望有超过1个打开的订单,而这是不同的检查方式。用法是这样的。 如果(UniqueOnDay() && CurrentlyOpenedOrders==0) ... PS:它假定你的EA有一个MagicNumber参数(确切名称)。PPS:它可以在Daiy以内的时间框架上工作。它在周线和月线图上无法正常工作。dresolo1: 我是编程新手,在MQL4方面需要帮助。我研究了一些程序员指南,并想出了如何根据我的交易策略来打开和关闭交易。我的困难是把每天的交易数量限制在1个。我希望每天的交易不超过1个(根据服务器时间)。所以我想检查开仓和平仓的订单,看看今天是否有订单被打开。如果今天有一个订单被打开,那么当天就不要再打开任何其他订单。请帮助我。 编码帮助 [存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. [删除] 2012.03.04 13:39 #2907 [langtitle=pl]将函数 Tema转换成Tema(close,period)[/langtitle] 术语 我想说的是:"如果你是一个人,那么你就应该把它变成一个人。你可以将函数Tema转换为Var1。如果你想在Var1中加入一个 "Ponizej",那么你就得先把这个 "Ponizej "的名字改掉。 #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 DarkBlue #property indicator_width1 2 //---- input parameters extern int EMA_period=4; //---- buffers string txt; double TemaBuffer[]; double Ema[]; double EmaOfEma[]; double EmaOfEmaOfEma[]; double Var1; int Var2; int i,limit,limit2,limit3; extern int Apply_To_Price=1; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(5); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Var1); SetIndexBuffer(1,TemaBuffer); SetIndexBuffer(2,Ema); SetIndexBuffer(3,EmaOfEma); SetIndexBuffer(4,EmaOfEmaOfEma); IndicatorShortName("TEMA("+EMA_period+")"); switch(Apply_To_Price) { case 1: {txt="Open";break;} case 2: {txt="High";break;} case 3: {txt="Low"; break;} case 4: {txt="Median"; break;} case 5: {txt="Typical"; break;} case 6: {txt="WghtdClose"; break;} default: {txt="Close";} } //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- int counted_bars=IndicatorCounted(); if (counted_bars==0) { limit=Bars-1; limit2=limit-EMA_period; limit3=limit2-EMA_period; } if (counted_bars>0) { limit=Bars-counted_bars-1; limit2=limit; limit3=limit2; } for (i=limit3;i>=0;i--) { Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO? // Alert(Var1); } Var2 = dodawanie (2,3); return(0); } double Tema(int Cena, int cykl) { //---- for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i); for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i); for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i); for (i=limit3;i>=0;i--) { TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma; //Alert(TemaBuffer); } return(TemaBuffer); } int dodawanie (int a, int b) { int c; c=a+b; return(c); } How to code? Help with simple custom 能不能用mt4编写出这样的曲线EMA(MA(C,N),M)? Mladen Rakic 2012.03.04 14:12 #2908 像这样(TEMA)... 如果你希望它像函数 一样,那么它应该是这样的。 double workTema[][3]; #define _ema1 0 #define _ema2 1 #define _ema3 2 double iTema(double price, double period, int r, int instanceNo=0) { if (ArrayRange(workTema,0)!= Bars) ArrayResize(workTema,Bars); instanceNo*=3; r = Bars-r-1; // // // // // double alpha = 2.0 / (1.0+period); workTema[r][_ema1+instanceNo] = workTema[r-1][_ema1+instanceNo]+alpha*(price -workTema[r-1][_ema1+instanceNo]); workTema[r][_ema2+instanceNo] = workTema[r-1][_ema2+instanceNo]+alpha*(workTema[r][_ema1+instanceNo]-workTema[r-1][_ema2+instanceNo]); workTema[r][_ema3+instanceNo] = workTema[r-1][_ema3+instanceNo]+alpha*(workTema[r][_ema2+instanceNo]-workTema[r-1][_ema3+instanceNo]); return(workTema[r][_ema3+instanceNo]+3.0*(workTema[r][_ema1+instanceNo]-workTema[r][_ema2+instanceNo])); }[/PHP] 也附上一个指标的例子。传递一个值而不是价格类型的好处是,这样你可以将tema应用于任何值(它不一定是价格的tema,它可以是另一个指标的tema,例如)。 lukibest: 巫师Jeszcze raz bo cos sie zle wkleilo.你可以在Var1的Funkcji Tema中选择一个。如果你想让Var1有更大的发展空间,你就必须要有更多的时间。 [PHP] #属性 indicator_chart_window #属性 indicator_buffers 1 #属性 indicator_color1 DarkBlue #属性 indicator_width1 2 //---- 输入参数 extern int EMA_period=4; //---- 缓冲区 string txt; double TemaBuffer[]。 double Ema[]; double EmaOfEma[]; double EmaOfEmaOfEma[]。 双重Var1。 int Var2; int i,limit,limit2,limit3; extern int Apply_To_Price=1; //+------------------------------------------------------------------+ //|自定义指标初始化函数| //+------------------------------------------------------------------+ int init() { //---- 指标 IndicatorBuffers(5); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Var1); SetIndexBuffer(1,TemaBuffer); SetIndexBuffer(2,Ema); SetIndexBuffer(3,EmaOfEma); SetIndexBuffer(4,EmaOfEmaOfEma)。 IndicatorShortName("TEMA("+EMA_period+")")。 switch(Apply_To_Price) { case 1: {txt="Open";break;} case 2: {txt="高点";break;} case 3: {txt="低点";break;} case 4: {txt="中位数";break;} case 5: {txt="典型"; break;} case 6: {txt="WghtdClose"; break;} 默认情况下。 {txt="关闭";} } //---- return(0); } //+------------------------------------------------------------------+ //| 自定义指标的去初始化功能。 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|自定义指标迭代函数| //+------------------------------------------------------------------+ int start() { //---- int counted_bars=IndicatorCounted()。 如果(counted_bars==0) { limit=Bars-1; limit2=limit-EMA_period; limit3=limit2-EMA_period。 } 如果(counted_bars>0) { limit=Bars-counted_bars-1; limit2=limit; limit3=limit2; } for (i=limit3;i>=0;i--) { Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA.DLACZEGO? // Alert(Var1); } Var2 = dodawanie (2,3); return(0); } double Tema(int Cena, int cykl) { //---- for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i) 。 for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i)。 for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i); for (i=limit3;i>=0;i--) { TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEma。 //Alert(TemaBuffer)。 } return(TemaBuffer)。 } int dodawanie (int a, int b) { int c; c=a+b。 返回(c)。 } 附加的文件: tema.mq4 3 kb SAMIM 2012.03.04 22:14 #2909 请帮助解决HAMMER代码问题 你好。 我刚刚开始使用mql4。 试图用以下指标在蜡烛图中挑选黑白锤子。 但是,在图表中,有时蜡烛图会出现错误的识别文本(白色锤子蜡烛被识别为黑色锤子蜡烛,反之亦然)。 请帮助我解决这种情况,提前感谢。 #property indicator_chart_window int limit。 //---- 缓冲区 string hammer[200000]; //+------------------------------------------------------------------+ //|CuStom指标 初始化函数| //+------------------------------------------------------------------+ int init() { 返回(0)。 } //+------------------------------------------------------------------+ //| CuStor指标去初始化功能 //+------------------------------------------------------------------+ int deinit() { //---- ObjectsDeleteAll(hammer,OBJ_TEXT)。 //---- return(0); } //+------------------------------------------------------------------+ //|CuStom指标迭代函数| //+------------------------------------------------------------------+ int start() { int N。 int N1; int N2; 字符串文本。 int counted_bars=IndicatorCounted(); limit=Bars-counted_bars。 for(N = 1; N < limit; N++) { hammer[N]=CharToStr(N)。 N1 = N + 1; N2 = N + 2; //---- //----,检查可能的错误 如果(counted_bars<0) { Alert("NO Bars.")。 return(-1); } // 检查锤子白的情况 如果(((Close[N1]>Open[N1])&((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1]))&((High[N1]-Close[N1])<=(Open[N1)-Low[N1])*0.10)){ ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point); ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen)。 } // 检查锤子是否为黑色 if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))){ ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point); ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen)。 } //---- }//结束for循环 return(0); } //+------------------------------------------------------------------+ How to code? 请指教,帮我看看源码什么地方错了 编码帮助 William Snyder 2012.03.04 23:31 #2910 svezir: 你好。我是在mql4中新开始的。 试图用以下指标在蜡烛图中挑选黑白锤子。 但是,在图表中,有时蜡烛图会出现错误的识别文本(白色锤子蜡烛被识别为黑色锤子蜡烛,反之亦然)。 请帮助我解决这种情况,提前感谢。 #property indicator_chart_window int limit。 //---- 缓冲区 string hammer[200000]; //+------------------------------------------------------------------+ //|CuStom指标初始化函数| //+------------------------------------------------------------------+ int init() { 返回(0)。 } //+------------------------------------------------------------------+ //| CuStor指标去初始化功能 //+------------------------------------------------------------------+ int deinit() { //---- ObjectsDeleteAll(hammer,OBJ_TEXT)。 //---- return(0); } //+------------------------------------------------------------------+ //|CuStom指标迭代函数| //+------------------------------------------------------------------+ int start() { int N。 int N1; int N2; 字符串文本。 int counted_bars=IndicatorCounted(); limit=Bars-counted_bars。 for(N = 1; N < limit; N++) { hammer[N]=CharToStr(N)。 N1 = N + 1; N2 = N + 2; //---- //----,检查可能的错误 如果(counted_bars<0) { Alert("NO Bars.")。 return(-1); } // 检查锤子白的情况 如果(((Close[N1]>Open[N1])&((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1]))&((High[N1]-Close[N1])<=(Open[N1)-Low[N1])*0.10)){ ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point); ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen)。 } // 检查锤子是否为黑色 if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))){ ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point); ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen)。 } //---- }//结束for循环 return(0); } //+------------------------------------------------------------------+ 嗨,Svezir。 有这个蜡烛形态的指标,也许会有帮助。 附加的文件: pattern_recognition_master_v3a.mq4 29 kb 1...284285286287288289290291292293294295296297298...347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
最后一个蜡烛的细节
你好。
需要一个指标来显示最后一根蜡烛的高点、低点、开盘和收盘值...
那为什么不使用跟踪止损呢?我的意思是,它几乎可以做到你原来想法的100%(几乎),而且它的代码要容易得多。
问题是(我不认为我的措辞是正确的,或者说不是100%正确的),止损点(无论如何现在)在整个交易过程中都将保持不变。这样的方法如何,当两笔交易打开时,代码可以检查未结订单的数量,如果它高于1(基本上是2),那么这两笔交易的止损 就会被修改为比以前高的某个数额。从本质上讲,这里有某种对冲作用。
谢谢。
madmax3
[langtitle=pl]Proszę o pomoc w napisaniu EA działającego n[/langtitle] 。
[lang=pl]我想说的是,我们的问题是,为什么要把我们的问题归结为一个问题呢?
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
外部int MagicNumber = 0;
extern bool SignalMail = False;
外部 bool EachTickMode = True;
外置双数 Lots = 0.1;
extern int Slippage = 1;
外部 bool UseStopLoss = True;
外置 int StopLoss = 10;
外部 bool UseTakeProfit = True;
外置 int TakeProfit = 5;
外部 bool UseTrailingStop = False;
extern int TrailingStop = 30;
extern int LevelRSIbuy=20;
extern int LevelRSIsell=80;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| 专家初始化函数 |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
如果(EachTickMode)Current = 0;否则Current = 1。
return(0);
}
//+------------------------------------------------------------------+
//| 专家去初始化功能|
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| 专家启动功能|
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
如果(EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
订单 = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| 变量开始 |
//+------------------------------------------------------------------+
double Var1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0);
double Buy1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0);
double Sell1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0);
//+------------------------------------------------------------------+
//|变量结束 |
//+------------------------------------------------------------------+
//检查头寸
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(OrderType() <= OP_SELL && OrderSymbol() == Symbol() ) {
IsTrade = True。
如果(OrderType() == OP_BUY){
//关闭
//+------------------------------------------------------------------+
//| 信号开始(退出买入)|
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| 信号结束(退出买入)|
//+------------------------------------------------------------------+
如果(Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen)。
if (SignalMail) SendMail("[信号提示]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
继续。
}
//拖曳止损
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
如果(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) 。
if (!EachTickMode) BarCount = Bars;
继续。
}
}
}
} else {
//关闭
//+------------------------------------------------------------------+
//| 信号开始(退出卖出)|
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| 信号结束(退出卖出)|
//+------------------------------------------------------------------+
如果(Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange)。
如果(SignalMail) SendMail("[信号警报]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False。
继续。
}
//拖曳止损
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
如果((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) 。
if (!EachTickMode) BarCount = Bars;
继续。
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (False) Order = SIGNAL_BUY;
如果 (False) 订单 = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| 信号结束 |
//+------------------------------------------------------------------+
//买入
如果(Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){
if(!IsTrade) {
//检查自由保证金
如果(AccountFreeMargin() < (1000 * Lots)) {
Print("我们没有钱。Free Margin = ", AccountFreeMargin())。
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue) 。
如果(Ticket > 0) {
如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY订单打开:", OrderOpenPrice())。
if (SignalMail) SendMail("[信号提示]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("打开买入订单出错。", GetLastError())。
}
}
if (EachTickMode) TickCheck = True;
如果(!EachTickMode) BarCount = Bars;
return(0);
}
}
//卖出
如果(Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){
if(!IsTrade) {
//检查自由保证金
如果(AccountFreeMargin() < (1000 * Lots)) {
Print("我们没有钱。Free Margin = ", AccountFreeMargin())。
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0。
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink) 。
如果(Ticket > 0) {
如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("Sell order opened : " , OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell")。
} else {
Print("错误打开卖出订单。", GetLastError())。
}
}
if (EachTickMode) TickCheck = True;
如果(!EachTickMode) BarCount = Bars;
return(0);
}
}
如果(!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+[/lang]
我想用这段代码来增加未平仓交易的获利(如果他们有两个未平仓交易)。
if(OrderType()==OP_BUY)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);
if(OrderType()==OP_SELL)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);total=OrdersTotal(); btw.
但我还是不能让它工作,有什么建议吗?
谢谢。
madmax3
帮助限制每日交易的数量为1
我是编程新手,在MQL4中需要帮助。我已经研究了一些编码指南,并且知道了如何根据我的交易策略打开和关闭交易。我的困难是把每天的交易数量限制在1个。我希望每天的交易不超过1个(根据服务器时间)。所以我想检查 开仓和平仓的订单,看看今天是否有订单被打开。如果今天有订单被打开,那么当天就不要再打开任何其他订单。
请帮助。
PS:它假定你的EA有一个MagicNumber参数(确切名称)。
PPS:它可以在Daiy以内的时间框架上工作。它在周线和月线图上无法正常工作。
我是编程新手,在MQL4方面需要帮助。我研究了一些程序员指南,并想出了如何根据我的交易策略来打开和关闭交易。我的困难是把每天的交易数量限制在1个。我希望每天的交易不超过1个(根据服务器时间)。所以我想检查开仓和平仓的订单,看看今天是否有订单被打开。如果今天有一个订单被打开,那么当天就不要再打开任何其他订单。请帮助我。
[langtitle=pl]将函数 Tema转换成Tema(close,period)[/langtitle]
术语
我想说的是:"如果你是一个人,那么你就应该把它变成一个人。你可以将函数Tema转换为Var1。如果你想在Var1中加入一个 "Ponizej",那么你就得先把这个 "Ponizej "的名字改掉。
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DarkBlue
#property indicator_width1 2
//---- input parameters
extern int EMA_period=4;
//---- buffers
string txt;
double TemaBuffer[];
double Ema[];
double EmaOfEma[];
double EmaOfEmaOfEma[];
double Var1;
int Var2;
int i,limit,limit2,limit3;
extern int Apply_To_Price=1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Var1);
SetIndexBuffer(1,TemaBuffer);
SetIndexBuffer(2,Ema);
SetIndexBuffer(3,EmaOfEma);
SetIndexBuffer(4,EmaOfEmaOfEma);
IndicatorShortName("TEMA("+EMA_period+")");
switch(Apply_To_Price)
{
case 1:
{txt="Open";break;}
case 2:
{txt="High";break;}
case 3:
{txt="Low"; break;}
case 4:
{txt="Median"; break;}
case 5:
{txt="Typical"; break;}
case 6:
{txt="WghtdClose"; break;}
default:
{txt="Close";}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
int counted_bars=IndicatorCounted();
if (counted_bars==0)
{
limit=Bars-1;
limit2=limit-EMA_period;
limit3=limit2-EMA_period;
}
if (counted_bars>0)
{
limit=Bars-counted_bars-1;
limit2=limit;
limit3=limit2;
}
for (i=limit3;i>=0;i--)
{
Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO?
// Alert(Var1);
}
Var2 = dodawanie (2,3);
return(0);
}
double Tema(int Cena, int cykl)
{
//----
for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i);
for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--)
{
TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma;
//Alert(TemaBuffer);
}
return(TemaBuffer);
}
int dodawanie (int a, int b)
{
int c;
c=a+b;
return(c);
}
像这样(TEMA)...
如果你希望它像函数 一样,那么它应该是这样的。也附上一个指标的例子。传递一个值而不是价格类型的好处是,这样你可以将tema应用于任何值(它不一定是价格的tema,它可以是另一个指标的tema,例如)。
巫师
Jeszcze raz bo cos sie zle wkleilo.你可以在Var1的Funkcji Tema中选择一个。如果你想让Var1有更大的发展空间,你就必须要有更多的时间。
[PHP]
#属性 indicator_chart_window
#属性 indicator_buffers 1
#属性 indicator_color1 DarkBlue
#属性 indicator_width1 2
//---- 输入参数
extern int EMA_period=4;
//---- 缓冲区
string txt;
double TemaBuffer[]。
double Ema[];
double EmaOfEma[];
double EmaOfEmaOfEma[]。
双重Var1。
int Var2;
int i,limit,limit2,limit3;
extern int Apply_To_Price=1;
//+------------------------------------------------------------------+
//|自定义指标初始化函数|
//+------------------------------------------------------------------+
int init()
{
//---- 指标
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Var1);
SetIndexBuffer(1,TemaBuffer);
SetIndexBuffer(2,Ema);
SetIndexBuffer(3,EmaOfEma);
SetIndexBuffer(4,EmaOfEmaOfEma)。
IndicatorShortName("TEMA("+EMA_period+")")。
switch(Apply_To_Price)
{
case 1:
{txt="Open";break;}
case 2:
{txt="高点";break;}
case 3:
{txt="低点";break;}
case 4:
{txt="中位数";break;}
case 5:
{txt="典型"; break;}
case 6:
{txt="WghtdClose"; break;}
默认情况下。
{txt="关闭";}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| 自定义指标的去初始化功能。
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int start()
{
//----
int counted_bars=IndicatorCounted()。
如果(counted_bars==0)
{
limit=Bars-1;
limit2=limit-EMA_period;
limit3=limit2-EMA_period。
}
如果(counted_bars>0)
{
limit=Bars-counted_bars-1;
limit2=limit;
limit3=limit2;
}
for (i=limit3;i>=0;i--)
{
Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA.DLACZEGO?
// Alert(Var1);
}
Var2 = dodawanie (2,3);
return(0);
}
double Tema(int Cena, int cykl)
{
//----
for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i) 。
for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i)。
for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--)
{
TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEma。
//Alert(TemaBuffer)。
}
return(TemaBuffer)。
}
int dodawanie (int a, int b)
{
int c;
c=a+b。
返回(c)。
}
请帮助解决HAMMER代码问题
你好。
我刚刚开始使用mql4。 试图用以下指标在蜡烛图中挑选黑白锤子。 但是,在图表中,有时蜡烛图会出现错误的识别文本(白色锤子蜡烛被识别为黑色锤子蜡烛,反之亦然)。 请帮助我解决这种情况,提前感谢。
#property indicator_chart_window
int limit。
//---- 缓冲区
string hammer[200000];
//+------------------------------------------------------------------+
//|CuStom指标 初始化函数|
//+------------------------------------------------------------------+
int init()
{
返回(0)。
}
//+------------------------------------------------------------------+
//| CuStor指标去初始化功能
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(hammer,OBJ_TEXT)。
//----
return(0);
}
//+------------------------------------------------------------------+
//|CuStom指标迭代函数|
//+------------------------------------------------------------------+
int start()
{
int N。
int N1;
int N2;
字符串文本。
int counted_bars=IndicatorCounted();
limit=Bars-counted_bars。
for(N = 1; N < limit; N++) {
hammer[N]=CharToStr(N)。
N1 = N + 1;
N2 = N + 2;
//----
//----,检查可能的错误
如果(counted_bars<0) {
Alert("NO Bars.")。
return(-1);
}
// 检查锤子白的情况
如果(((Close[N1]>Open[N1])&((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1]))&((High[N1]-Close[N1])<=(Open[N1)-Low[N1])*0.10)){
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen)。
}
// 检查锤子是否为黑色
if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))){
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen)。
}
//----
}//结束for循环
return(0);
}
//+------------------------------------------------------------------+
你好。
我是在mql4中新开始的。 试图用以下指标在蜡烛图中挑选黑白锤子。 但是,在图表中,有时蜡烛图会出现错误的识别文本(白色锤子蜡烛被识别为黑色锤子蜡烛,反之亦然)。 请帮助我解决这种情况,提前感谢。
#property indicator_chart_window
int limit。
//---- 缓冲区
string hammer[200000];
//+------------------------------------------------------------------+
//|CuStom指标初始化函数|
//+------------------------------------------------------------------+
int init()
{
返回(0)。
}
//+------------------------------------------------------------------+
//| CuStor指标去初始化功能
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(hammer,OBJ_TEXT)。
//----
return(0);
}
//+------------------------------------------------------------------+
//|CuStom指标迭代函数|
//+------------------------------------------------------------------+
int start()
{
int N。
int N1;
int N2;
字符串文本。
int counted_bars=IndicatorCounted();
limit=Bars-counted_bars。
for(N = 1; N < limit; N++) {
hammer[N]=CharToStr(N)。
N1 = N + 1;
N2 = N + 2;
//----
//----,检查可能的错误
如果(counted_bars<0) {
Alert("NO Bars.")。
return(-1);
}
// 检查锤子白的情况
如果(((Close[N1]>Open[N1])&((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1]))&((High[N1]-Close[N1])<=(Open[N1)-Low[N1])*0.10)){
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen)。
}
// 检查锤子是否为黑色
if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))){
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen)。
}
//----
}//结束for循环
return(0);
}
//+------------------------------------------------------------------+嗨,Svezir。
有这个蜡烛形态的指标,也许会有帮助。