如何编码? - 页 279

 
g.pociejewski:
[lang=pl]还有一个问题,你的时间是GMT还是非GMT?如果不是格林尼治标准时间,我将对这个EA做一点改变。

我刚刚做完,请检查一下,如果一切正常,请给我发邮件。

距离网的低点和高点止损和TP是我作为外部变量制作的。

谢谢 Grzesiek. [/lang]

亲爱的Grzesiek

我把这个指标粘贴在专家文件夹里,今天我监测了一下,想了解它的工作原理。它的问题是,一旦它做了第一笔交易,并且在止损或T/P上关闭了订单,然后EA立即在它关闭最近订单的价格上再次开始交易。我怎样才能在代码中阻止它呢?

 

有谁能帮我解决这个问题?

你好,论坛

这个代码有一个问题,当它执行交易 时,它是正常的,但当它再次关闭订单时,EA在前一个订单关闭的价格和时间上打开新的交易。我在代码中没有看到任何错误。写这篇文章的人非常忙,不在线。谁能建议一下问题出在哪里?

extern double stopLoss = 35.0;

extern double takeProfit = 50.0;

extern string Begin="00:00";

extern string End="08:00";

External double distance = 5;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

外置双数lot = 1;

int magic = 123;

int slippage = 1;

string comment = "test";

int ticket;

//+------------------------------------------------------------------+

//|专家初始化函数 |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家的去初始化功能|

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家启动功能|

//+------------------------------------------------------------------+

int start()

{

//----

如果(isGoodTime(Begin,End))

{

if(!cond)

{

low = Bid;

high = Ask;

}

cond = true;

if(Bid < low) low = Bid;

如果(Ask > high) high = Ask;

}

如果((high - low)*1000>distance)

{

cond2 = true;

}

如果(!isGoodTime(Begin,End))

{

cond = false;

}

如果(!isGoodTime(Begin,End) && cond2)

{

如果(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0010))

{

如果(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lot,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit), comment,magic);

}

如果(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET)。

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point, takeProfit),0)。

}

}

}

如果(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.0010)

{

如果(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lot,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point, takeProfit), comment,magic)。

}

如果(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET)。

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point, takeProfit),0)。

}

}

}

}

//----

return(0);

}

//+------------------------------------------------------------------+

bool isGoodTime(string Begin, string End) {

如果(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

返回(true)。

}

return(false);

}

int countOrders(int oMagic,int oType) {

int count=0;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

如果(OrderMagicNumber()==oMagic) {

如果(OrderSymbol()==Symbol()) {

如果(OrderType()==oType || oType<0){

count++;

}

}

}

}

}

return(count)。

}

double sltpValue(double w1, int w2)

{

如果(w2 == 0)

返回(0)。

返回(NormalizeDouble(w1, Digits))。

}

 

你好,Avasys。

就我所知,该代码没有任何问题,根据您的描述,它完全按照编程的方式进行(当问价高于高价时买入,当买价低于低价时卖出),它基本上是在高价和低价被打破时分别继续买入和卖出。

干杯。

 
Avasys:
谢谢你的评论

有什么办法可以让代码在一天中只交易一次,并且只在第一次突破时交易。

这段代码的作者是个大忙人,他不可能贡献很多时间。

感谢帮助

[lang=pl]//+------------------------------------------------------------------+

//|简单的EA.mq4

//| Copyright © 2011, luktom.biz |版权所有。

//|www.luktom.biz/en|/|

//+------------------------------------------------------------------+

#property copyright "Copyright © 2011, luktom.biz.".

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="2:00";

extern string End="10:00";

外部双倍距离=60。

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

外置双数lot = 0.1;

int magic = 1232344524285020;

int slippage = 1;

string comment = "";

int ticket;

int short = 0;

int long = 0;

//+------------------------------------------------------------------+

//|专家初始化函数 |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家的去初始化功能|

//+------------------------------------------------------------------+

int deinit()

{

//----

Print(countOrders(magic,OP_BUY))。

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家启动功能|

//+------------------------------------------------------------------+

int start()

{

打印(AccountCurrency())。

//----

如果(isGoodTime(Begin,End))

{

short = 0;

long = 0。

if(!cond)

{

low = Bid;

high = Ask;

}

cond = true;

if(Bid < low) low = Bid;

如果(Ask > high) high = Ask;

}

如果((high - low)*1000>distance)

{

cond2 = true;

}

如果(!isGoodTime(Begin,End))

{

cond = false;

}

如果(!isGoodTime(Begin,End) && cond2)

{

如果(countOrders(magic,OP_SELL) == 0 )

{

如果(Bid<=(low-0.0005) && short == 0)

{

short++;

如果(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lot,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit), comment,magic);

}

如果(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET)。

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point, takeProfit),0)。

}

}

}

如果(countOrders(magic,OP_BUY) == 0)

{

如果((Ask-high)>=0.005 && long ==0)

{

long++。

如果(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lot,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point, takeProfit), comment,magic)。

}

如果(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET)。

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point, takeProfit),0)。

}

}

}

}

//----

return(0);

}

//+------------------------------------------------------------------+

bool isGoodTime(string Begin, string End) {

如果(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

返回(true)。

}

return(false);

}

int countOrders(int oMagic,int oType) {

int count=0;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

如果(OrderMagicNumber()==oMagic) {

如果(OrderSymbol()==Symbol()) {

如果(OrderType()==oType || oType<0){

count++;

}

}

}

}

}

return(count)。

}

double sltpValue(double w1, int w2)

{

如果(w2 == 0)

返回(0)。

返回(NormalizeDouble(w1, Digits))。

}

现在EA每天只开一个仓位。关于你的电子邮件问题,在论坛的某个地方有我的帖子:)

如果找到了,请告诉我。

如果找到了,请告诉我,谢谢。

Grzesiek[/lang]

 
Pip:
嗨,Avasys。

就我所知,代码没有任何问题,根据你的描述,它所做的正是它编程要做的(当Ask高于high时买入,当bid低于low时卖出),它基本上是在high和low被打破时分别继续买入和卖出。

谢谢。

谢谢你的评论

有没有办法告诉代码在一天中只交易一次,并且只在第一次突破时交易。

这段代码的作者是个大忙人,他不可能贡献很多时间,因为看起来

我注意到的是,尽管代码中标明的时间间隔超过60点,系统仍然执行交易,它只在特定时间(代码中标明,见开始和结束时间)的间隔小于60点时才交易。

希望得到帮助

 
g.pociejewski:
[lang=pl]//+------------------------------------------------------------------+

//| simple EA.mq4 | |

//| Copyright © 2011, luktom.biz |/| 版权所有。

//|www.luktom.biz/en|/|

//+------------------------------------------------------------------+

#property copyright "Copyright © 2011, luktom.biz.".

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="2:00";

extern string End="10:00";

外部双倍距离 = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

外置双数lot = 0.1;

int magic = 1232344524285020;

int slippage = 1;

string comment = "";

int ticket;

int short = 0;

int long = 0;

//+------------------------------------------------------------------+

//|专家初始化函数 |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家的去初始化功能|

//+------------------------------------------------------------------+

int deinit()

{

//----

Print(countOrders(magic,OP_BUY))。

//----

return(0);

}

//+------------------------------------------------------------------+

//|专家启动功能|

//+------------------------------------------------------------------+

int start()

{

打印(AccountCurrency())。

//----

如果(isGoodTime(Begin,End))

{

short = 0;

long = 0。

if(!cond)

{

low = Bid;

high = Ask;

}

cond = true;

if(Bid < low) low = Bid;

如果(Ask > high) high = Ask;

}

如果((high - low)*1000>distance)

{

cond2 = true;

}

如果(!isGoodTime(Begin,End))

{

cond = false;

}

如果(!isGoodTime(Begin,End) && cond2)

{

如果(countOrders(magic,OP_SELL) == 0 )

{

如果(Bid<=(low-0.0005) && short == 0)

{

short++;

如果(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lot,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit), comment,magic);

}

如果(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET)。

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point, takeProfit),0)。

}

}

}

如果(countOrders(magic,OP_BUY) == 0)

{

如果((Ask-high)>=0.005 && long ==0)

{

long++。

如果(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lot,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point, takeProfit), comment,magic)。

}

如果(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET)。

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point, takeProfit),0)。

}

}

}

}

//----

return(0);

}

//+------------------------------------------------------------------+

bool isGoodTime(string Begin, string End) {

如果(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

返回(true)。

}

return(false);

}

int countOrders(int oMagic,int oType) {

int count=0;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

如果(OrderMagicNumber()==oMagic) {

如果(OrderSymbol()==Symbol()) {

如果(OrderType()==oType || oType<0){

count++;

}

}

}

}

}

return(count)。

}

double sltpValue(double w1, int w2)

{

如果(w2 == 0)

返回(0)。

返回(NormalizeDouble(w1, Digits))。

}

现在EA每天只开一个仓位。关于你的电子邮件问题,在论坛的某个地方有我的帖子:)

如果找到了,请告诉我。

谢谢。

Grzesiek[/lang]

谢谢你,伙计。

我复制了整个代码并粘贴在mq4文件中,但当我把它复制到专家文件夹时,它没有工作,它没有创建ex4文件,也没有出现在专家顾问手册中。所以请你上传mq4文件,或者代码中有什么问题,因为我试过几次了

 

检测鼠标点击在图表上的x,y位置

有没有可能在MT4中检测鼠标点击的位置? 我不是在说WindowOnDrop。 如果我知道x,y屏幕坐标,我可以把它转换成相应的价格/时间吗?

谢谢你的帮助。

最好的问候。

蒂芙尼

 

亲爱的朋友

今天周一,代码( 周四和周五工作的旧代码)完全不工作了。

我手动输入了交易。

 

简单的系统。需要非常少的EA建议

以下是逻辑

当格林尼治标准时间02:00和10:00之间的范围小于60点时进行交易,如果价格突破最低-5点线则开仓卖出,如果价格突破最高+5点线则买入。每天只执行一次交易,不管交易是否被取消在止损点关闭或获利,每天只执行一次订单。

这里是代码,但它不工作,在MT4的EA MANU中,它有不活动的图标,在专家文件夹中没有ex4文件,我不明白是什么问题

外部双倍止损=300.0。

外设 double takeProfit = 500.0;

extern string Begin = "2: 00";

extern string End = "10: 00";

外部的双倍距离 = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

外置双数lot = 0.1;

int magic = 1232344524285020;

int slippage = 1;

string comment = "";

int ticket;

int short = 0;

long int = 0;

//+------------------------------------------------------------------+

//|专家初始化函数 |

//+------------------------------------------------------------------+

int init()

{

//----

//----

(0) 返回。

}

//+------------------------------------------------------------------+

//|专家去初始化功能|

//+------------------------------------------------------------------+

int deinit ()

{

//----

打印(countOrders(magic,OP_BUY))。

//----

(0)返回。

}

//+------------------------------------------------------------------+

//|专家启动功能|

//+------------------------------------------------------------------+

int start()

{

打印 (AccountCurrency ())。

//----

如果(isGoodTime (Begin, End))

{

short = 0;

long = 0。

if (! cond)

{

low = Bid;

high = Ask;

}

cond = true;

如果 (Bid < low) low = Bid;

如果(Ask > high) high = Ask;

}

如果((高-低)*1000>距离)

{

cond2 = true;

}

如果(! isGoodTime (Begin, End))

{

cond = false;

}

如果(! isGoodTime (Begin, End) & & cond2)

{

如果(countOrders (magic, OP_SELL) == 0)

{

如果(竞价≪=(CRL-0.0005)&&短==0)。

{

空头 + +。

如果(isECN == false)

{

OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Ask-takeProfit * Point, takeProfit), comment, magic) 。

}

如果(isECN)

{

ticket = OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, 0,0, comment, magic);

OrderSelect (ticket, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Bid-takeProfit * Point, takeProfit), 0);

}

}

}

如果(countOrders (magic, OP_BUY) == 0)

{

如果((Ask-high) > = 0.005 & & long = = 0)

{

long + +。

如果(isECN == false)

{

OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, sltpValue (Ask-stopLoss * Point, stopLoss), sltpValue (Bid + takeProfit * Point, takeProfit), comment, magic) 。

}

如果(isECN)

{

ticket = OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, 0,0, comment, magic);

OrderSelect (ticket, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Bid-stopLoss * Point, stopLoss), sltpValue (Ask + takeProfit * Point, takeProfit), 0) 。

}

}

}

}

//----

(0) 返回。

}

//+------------------------------------------------------------------+

bool isGoodTime (string, string, Begin, End) {

如果(TimeCurrent () > Localtime (Begin) & & TimeCurrent < Localtime () (End)){

返回(true)。

}

返回(false)。

}

int countOrders (int, int oMagic oType) {

int count = 0;

for (int i = 0; i < OrdersTotal (); i ++) {

如果(OrderSelect(i,SELECT_BY_POS)) {

如果(OrderMagicNumber () == oMagic) {

如果(OrderSymbol () = the = Symbol () ) {

如果(OrderType () == oType || oType < 0) {

count ++;

}

}

}

}

}

返回(计数)。

}

double sltpValue (double, int w1 w2)

{

如果(w2 = = 0)

返回(0)。

返回(NormalizeDouble (w1, Digits))。

}

 

Forex.com EAs

我是个白痴。 我把这篇文章发错了论坛......而且我不知道如何把它移到编程论坛。 我对造成的不便表示歉意;这个错误是无意的。

我已经做了3年的现货外汇交易,开发了2个EA。 这些EA在Glocap、FXCM和Alpari上运行良好(我是美国居民,所以我选择的经纪商有些限制)。 此外,我想要一个佣金内置于点差的MT4账户(个人偏好)。

我最近在Forex.com(Gain Capital)的模拟账户上测试了这些EA。 两个EA都运行良好,并按照编程的规则进行交易。 然而,当我在Forex.com开设真实账户时,EA #1不再正常工作,但EA #2工作正常。 EA #1在Forex.com的策略测试器中工作正常,但我知道这并不重要。 这整件事对我来说非常奇怪,因为两个EA都使用相同的代码来打开交易(EA #1的错误是在试图打开交易时出现的),设置手数大小,监控交易和关闭交易。下面是关于两个EA的一些信息。

EA #1 EUR/JPY 使用一目均衡指标

EA #2 欧元/美元 使用3条移动平均线和MACD

正如我之前所说,EA #2的交易很好;按照编程的规则工作。 当EA #1试图打开一些交易时,我收到以下错误信息。2011.11.21 17:00:02 Ichimoku_1700Eastern EURJPYpro,H1: Ichimoku_Open EA for EURJPYpro:开启买入订单错误。(133)交易被禁用///为103.7210

此外,当EA #2试图进行交易时,专家日志总是显示std.lib在抛出错误的交易之前立即加载(这在EA #1上没有发生):2011.11.21 17:00:02 stdlib EURJPYpro,H1:加载成功

这里是这个谜题的最后一块:EA #2将打开交易,但不是在东部时间17点。 所有的错误都发生在试图在东部时间17点开启的交易上(这可能是一个巧合)。

我已经把EA拆开了;从头开始重新输入代码;把EA #1的代码复制到EA #2中,但似乎都没有解决这个问题。 Forex.com不想帮忙,因为他们认为这是 "EA支持",而他们并不提供。 在互联网上我能找到的关于这个错误的信息中,它意味着要么a)经纪商不允许EA交易(我知道这不是真的),要么b)交易正在发送止损和/或限制,这在即时执行经纪商中是不可行的(交易没有发送止损或限制)。 Forex.com已经说过,他们不会在交易日的任何时候暂停交易。

我对这个小组的问题如下。

1. 有人遇到过这个问题吗?

2. 如果有,你是怎么解决的?

3. 如果你从未见过这个问题,你认为是什么原因造成的?

我相信这是很简单的事情,只是我没有看到。 如果您有任何意见、经验和想法,我们将不胜感激。