PDA

View Full Version : 图表图表代码



papipk6868
09-25-2009 22:14, 10:14 PM
我有一个indior(没有代码),在我的图表上放置一个图形,根据这个图形,我想发起买卖。有没有人知道你是否可以根据出现在图表上的图形,即箭头,复选标记,数字等在EA中编写动作?如果是这样,代码是什么?

papipk6868
12-16-2021 21:38, 09:38 PM
我认为这不可能做到。任何程序员都有他们的建议吗?

Mewlinew
12-16-2021 22:59, 10:59 PM
如果我理解您的要求,您想要找到箭头的价格并下订单。据推测,如果有多个箭头,你会想要最后一个。这段代码应该这样做:datetime latest = 0;双倍价格= 0; for(int ix = 0; ixlt; ObjectsTotal(OBJ_ARROW); ix ){datetime objTime = ObjectGet(ObjectName(ix),OBJPROP_TIME1); if(objTime gt; latest){latest = objTime; price = ObjectGet(ObjectName(ix),OBJPROP_PRICE1);添加逻辑以在此处下订单如果存在单个箭头,则代码可以简化为:double price = ObjectGet(ObjectName(0),OBJPROP_PRICE1);

弗雷德贡达丹克尔
12-17-2021 00:20, 12:20 AM
这里还讨论了主题
https://www.histoforex.com/trading-systems/330-simple-system.html

Luna68
12-17-2021 01:41, 01:41 AM
//在开始之后//第一段代码,将创建一个名为trail的文本对象//如果对象被移动,它将切换轨迹,开/关//该对象是否存在?如果没有,则创建if if(ObjectFind(trail)== -1){ObjectCreate(trail,OBJ_LABEL,0,0,0); ObjectSet(trail,OBJPROP_COLOR,Red); ObjectSet(trail,OBJPROP_XDISTANCE,80); ObjectSet(trail,OBJPROP_YDISTANCE,50); ObjectSetText(trail,trail,10,Times New Roman,Gray); }/对象被移动了吗?如果是这样,该怎么办? if(trail == false ObjectGet(trail,OBJPROP_XDISTANCE)!= 80){trail = true;/我们将trail更改为true,并将对象移回ObjectSet(trail,OBJPROP_XDISTANCE,80); ObjectSet(trail,OBJPROP_YDISTANCE,50); ObjectSetText(trail,trail,12,Times New Roman,White); }/对象被移动了吗?如果是这样,该怎么办? if(trailObjectGet(trail,OBJPROP_XDISTANCE)!= 80){trail = false;/我们将trail更改为false,并将对象移回ObjectSet(trail,OBJPROP_XDISTANCE,80); ObjectSet(trail,OBJPROP_YDISTANCE,50); ObjectSetText(trail,trail,12,Times New Roman,Gray); }/现在让我们改变对象的颜色字体if(trail)ObjectSetText(trail,trail,12,Times New Roman,White); if(!trail)ObjectSetText(trail,trail,10,Times New Roman,Gray);问候

papipk6868
12-17-2021 03:01, 03:01 AM
谢谢,所有。我试试看。

papipk6868
12-17-2021 04:22, 04:22 AM
如果我理解您的要求,您想要找到箭头的价格并下订单。据推测,如果有多个箭头,你会想要最后一个。这段代码应该这样做:datetime latest = 0;双倍价格= 0; for(int ix = 0; ixlt; ObjectsTotal(OBJ_ARROW); ix ){datetime objTime = ObjectGet(ObjectName(ix),OBJPROP_TIME1); if(objTime gt; latest){latest = objTime; price = ObjectGet(ObjectName(ix),OBJPROP_PRICE1);添加逻辑以在此处下订单如果只有一个箭头,则可以减少代码...
Meister - 我有一个印象,在我的图表上放置一个绿色(向上)箭头或一个红色(向下)箭头。如果出现绿色(向上)加上条件1且条件2都为真,则启动买单。如果出现红色(向下)箭头且条件1和2都为真,则启动卖单。可以修改它以符合这些要求吗?此外,此代码是否会在之后:int start(){

Mewlinew
12-17-2021 05:43, 05:43 AM
我想我现在对你的情况有了更好的了解 - 价格真的不重要。也许需要时间(objTime),如果不是只是删除它。我还找到了一种简化代码的方法。我现在意识到最新箭头将始终是最高指数。我认为你可以在任何地方包含代码,我认为没有任何依赖。 bool long = false,short = false; if(ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1),OBJPROP_COLOR)== Green){datetime objTime = ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1),OBJPROP_TIME1); long = true; } else if(ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1),OBJPROP_COLOR)== Red){objTime = ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1),OBJPROP_TIME1); short = true; }

papipk6868
12-17-2021 07:04, 07:04 AM
再次感谢,梅斯特。我会试一试。

papipk6868
12-17-2021 08:25, 08:25 AM
Meister - 我试图将您的代码合并到我的EA中。当我进行回测时,我在结果期刊中得到以下两条评论。 - ObjectName函数的无效对象编号-1 - 传递给ObjectGet函数的对象名称不能是未初始化或空字符串这是我的代码:if(ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1),OBJPROP_COLOR)== Green){long = true;} else if(ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1),OBJPROP_COLOR)== Red){short = true;}这是我的买卖代码:if(long == true)Order = SIGNAL_BUY; if(short == false)Order = SIGNAL_SELL;有什么建议?

Mewlinew
12-17-2021 09:45, 09:45 AM
检查是否缺少箭头对象应该可以防止出现此问题。我认为在运行EA之前箭头会出现,但情况可能并非总是如此。 if(ObjectsTotal(OBJ_ARROW)gt; 0){if(ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1),OBJPROP_COLOR)== Green){long = true;} else if(ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1) ),OBJPROP_COLOR)==红色){short = true;}}

papipk6868
12-17-2021 11:06, 11:06 AM
谢谢,梅斯特。现在我每小时都会收到一个日记错误:OrderSend错误130通过Meta帮助菜单看来,错误130似乎引用了无效停止。我不确定这是否与我的特定错误相关。我在哪里可以找到这个错误的解释?显然我的代码中有一些东西与你提供的Object代码没有啮合,但我不知道在哪里或为什么。可能是因为我在EA中的不正确位置上了你的代码吗?我在变量开始之前得到它。见下文。/ ----------------------------------------------- ------------------- /|专家初始化功能|/ ----------------------------------------------- ------------------- int init(){BarCount = Bars; if(EachTickMode)Current = 0;否则当前= 1;返回(0); }/ ---------------------------------------------- -------------------- /|专家取消初始化功能|/ ----------------------------------------------- ------------------- int deinit(){return(0); }/ ---------------------------------------------- -------------------- /|专家启动功能|/ ----------------------------------------------- ------------------- int start(){int Order = SIGNAL_NONE; int Total,Ticket; double StopLossLevel,TakeProfitLevel; if(EachTickMode Bars!= BarCount)TickCheck = False; Total = OrdersTotal(); Order = SIGNAL_NONE; if(ObjectsTotal(OBJ_ARROW)gt; 0){if(ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1),OBJPROP_COLOR)== Green){long = true;} else if(ObjectGet(ObjectName(ObjectsTotal(OBJ_ARROW)-1) ),OBJPROP_COLOR)==红色){short = true;}}/ -------------------------------- ---------------------------------- /|变量开始|/ ----------------------------------------------- -------------------

Mewlinew
12-17-2021 12:27, 12:27 PM
这个错误与买卖信号无关,与逻辑流无关。只是指定的止损与OrderSend或OrderModify的AskBid过于接近。这与手动下订单并将止损位置太接近市场价格没什么不同。大多数交易者都熟悉这种情况。这是一些类似于我用来防止此错误的简化代码。 #12288; double stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)* Point; if(SL gt; Bid - stopLevel)SL = Bid - stopLevel - Point;/购买订单if(SL lt; Ask stopLevel)SL = Ask stopLevel Point;/销售订单

papipk6868
12-17-2021 13:48, 01:48 PM
谢谢,梅斯特。我可能会告诉我一点编程新手,我从来没有在我的任何其他EA上遇到过这个问题。我会试试这段代码。

wulio46666666
12-17-2021 15:08, 03:08 PM
//在开始之后//第一段代码,将创建一个名为trail的文本对象//如果对象被移动,它将切换轨迹,开/关//该对象是否存在?如果没有,则创建if if(ObjectFind(trail)== -1){ObjectCreate(trail,OBJ_LABEL,0,0,0); ObjectSet(trail,OBJPROP_COLOR,Red); ObjectSet(trail,OBJPROP_XDISTANCE,80); ObjectSet(trail,OBJPROP_YDISTANCE,50); ObjectSetText(trail,trail,10,Times New Roman,Gray); } ...
感谢ForexFlash(弓),这段代码。我一直在急切地实施它。我喜欢图表上的“按钮”选项。现在,由于我使用了大量的按钮,我正在尝试编写快捷方式,这可以通过common_functions.mqh中的'include#'来调用,就像7bit的一样。他有它,但我希望能够选择字体大小和字体本身。我所有的业余调整代码都没有产生预期的结果。这是h 7bit(弓)代码:插入代码/** *显示一个按钮并检查它是否已被启动。 *模拟一个带有必须由用户移动的标签的按钮。 *如果标签已被移动并将其移回,则返回true。 *如果它尚不存在则创建它。 *bool labelButton(字符串名称,int x,int y,int corner,string text,color clr = Gray){if(IsOptimization()){return(false); } if(ObjectFind(name)!= -1){if(ObjectGet(name,OBJPROP_XDISTANCE)!= x || ObjectGet(name,OBJPROP_YDISTANCE)!= y){ObjectDelete(name);返回(真); label(name,x,y,corner,#91; text #93;,clr);返回(假);以下是他在EA中使用它的方法:插入代码void checkButtons(){if(!running){deleteStopButtons(); if(labelButton(start_long,15,15,1,start long,Lime)){go(LONG); } if(labelButton(start_short,15,30,1,start short,Lime)){go(SHORT); } if(labelButton(start_bidir,15,45,1,start bidirectional,Lime)){go(BIDIR);我尝试在'color clr = Gray)之前插入'int size = 10,string font = Verdana',没有菜鸟成功。现在,我看到该字体只能在ObjectSetText()中定义。我尝试了所有跨越我没有做过多编码的大脑的东西。那么,我该如何实现呢?感谢宝贵的(我宝贵的LOL)帮助。西蒙S爱你

wulio46666666
12-17-2021 16:29, 04:29 PM
“ELO!我已经找到了解决问题的方法。现在是这样编码的:#include(x_file_name)修改了7bit(弓形)代码:插入代码//-----标签功能 - 需要用于标签功能-----/创建文本label string label(string name,int x,int y,int corner,string text,int size,string font,color clr = Gray){if(!IsOptimization()){if(name ==){name = label_ 时间#91; 0#93 ;; } if(ObjectFind(name)== -1){ObjectCreate(name,OBJ_LABEL,0,0,0); ObjectSet(name,OBJPROP_COLOR,clr); ObjectSet(name,OBJPROP_CORNER,corner); ObjectSet(name,OBJPROP_XDISTANCE,x); ObjectSet(name,OBJPROP_YDISTANCE,y); ObjectSet(name,OBJPROP_FONTSIZE,size); ObjectSetText(名称,文本,大小,字体); } return(name); }/-----图形按钮仿真功能-----/显示一个按钮并检查它是否已被启动。模拟具有必须由用户移动的标签的按钮。如果已移动标签并将其移回,则返回true。如果它尚不存在则创建它。 bool labelButton(string name,int x,int y,int corner,string text,int size,string font,color clr = Gray){if(IsOptimization()){return(false); } if(ObjectFind(name)!= -1){if(ObjectGet(name,OBJPROP_XDISTANCE)!= x || ObjectGet(name,OBJPROP_YDISTANCE)!= y){ObjectDelete(name); return(true); label(name,x,y,corner,text,size,font,clr);返回(假); - 这是我在EA代码中使用它的方式(目前,它什么也没做,我完全重新编码我的EA):插入的代码//----- START FUNCTION ----- int start(){CheckButtons( ); }/----- CUSTOM FUNCTIONS ----- void CheckButtons(){int size = 12; int SpaceBtwButt = 2 *(size3); int x = 10; int y =(size SpaceBtwButt); string font = Verdana;/labButtYDist#91; 10#93;#91; 9#93 ;;/应该像= {n y); ... labelButton(tradeButton,x,1 * y,1,TRADE,size,font,Red);贸易=假; labelButton(buyOnlyButton,x,2 * y,1,仅限购买,尺寸,字体,C'81,81,81'); labelButton(sellOnlyButton,x,3 * y,1,SELL ONLY,size,font,C'101,101,101'); labelButton(closeBuy,x,4 * y,1,CLOSE BUY,size,font,DodgerBlue); labelButton(closeSell,x,5 * y,1,CLOSE SELL,大小,字体,红色);现在,我们进入下一次大脑搅拌解决方案搜索。最好的问候,西蒙