你认为有非英语母语的人能够理解你的故事吗?我理解绵羊和牧羊人约翰先生,但这个故事对我来说毫无意义。(也许是我的问题......所以我很抱歉)
你能用一些 "国际英语 "来解释你的问题吗,使用交易/mql4的一般定义?
这句话是什么意思?
你认为有非英语母语的人能够理解你的故事吗?我理解绵羊和牧羊人约翰先生,但这个故事对我来说毫无意义。(也许是我的问题......所以我很抱歉)
你能用一些 "国际英语 "来解释你的问题吗,使用交易/mql4的一般定义?
这句话是什么意思?
唯一的蜡烛 - 如何打开位置?- 这应该是下一个主题。主持人,你怎么看? 我可以吗?
我们执行 选定的 方案
如何发送订单?
int start() // start program { // We have some function here like "int CalculateCurrentOrders(string symbol)" and "double LotsOptimized()" // many different thing, suddenly! we have our "CheckOpen();" //-------------------------------- void CheckOpen() // void - because function return nothing { // start body int res; // we will use changeable "res" this is "int" value if( Bid==Close[1]+4*Point) // check conditions: Bid or Ask must be 4 Point above a BAR if no - nothing happen if Yes go below { // start body if res=OrderSend(Symbol(),OP_SELL,0.02,Bid,0,Open[1]+37*Point,0,"",MAGICMA,0,Red); // start "res" and "res" is sending message to platform to open position // what position is in "()" allways must be the same sequence symbol , op_*** , lot size , ...) return; // if "res" do it then retunrn too ... y ... "if". Because "if" is done return too CheckOpen(). Because "CheckOpen()" is done stop and end. } // stop body if } // stop body function "void CheckOpen()" //--------------------------------
我们有一个订单
但我应该怎么做才能在一个函数 中打开两个位置?
我们有我们的方案CheckForOpenS1()在这些方案中,我们买了两次,如果我们的价格将在正确的地方,当然
//-------------------------------- void CheckOpen1() // define first function { int res; if( Bid==Close[1]+4*Point) { res=OrderSend(Symbol(),OP_SELL,0.02,Bid,0,0,0,"",MAGICMA,0,Red); return; } } void CheckOpen2() // define second function { int res; if( Bid==Close[1]+8*Point) // change 8 Point ( 4 ==> 8 ) { res=OrderSend(Symbol(),OP_SELL,0.02,Bid,0,0,0,"",MAGICMA,0,Red); return; } } // I DONT KNOW.............. //-------------------------------- / our scenario void CheckForOpenS1()= true; void CheckOpen1() void CheckOpen2() //-------------------------------- / OR LIKE THESE int res; if ( CheckForOpenS1() == true) { res= CheckOpen1() CheckOpen2(); }
唯一的蜡烛 - 如何打开位置?- 这应该是下一个主题。主持人,你怎么看? 我可以吗?
我们执行 选定的 方案
如何发送订单?
我们有一个订单
但我应该怎么做才能在一个函数中打开两个位置?
我们有我们的方案CheckForOpenS1()在这些方案中我们买了两次,如果我们的价格将在正确的地方,当然
我不太明白你在问什么 ......你没有把自己说得很清楚 ......也许这只是我的问题。
不过这段代码会给你带来麻烦 ......
if( Bid == Close[1] + 4 * Point)
阅读此主题:Can price != price ?
按照承诺,我又看了一遍,但对我来说仍然没有意义,我很抱歉。
这将永远不会起作用。
double bull() // check first candle -mabey is bull { double A=Open[1]; // we use double because euro/usd have point example 1.9865 double B=Close[1]; double C=B-A; return(C); // <-- C is probably never 1,2,3,4,5..... } // when we have bull catalog/ segregate him.. switch(bull()) // <-- the expression here is something like 0.00123. None of your case statements will be executed. { case 1 : break; // nothing happen case 2 : break; // nothing happen case 3 : break; // nothing happen case 4 : CheckForOpenS1(); break; // start CheckForOpenS1()- take it and go thrue with this.. we will see want is '...S1' case 5 : CheckForOpenS2(); CheckForOpenS3() break; // start CheckForOpenS2() and S3 .... }
请阅读这里关于如何使用开关:https://docs.mql4.com/basis/operators/switch
这一点都不清楚。
void CheckOpen2() // define second function { int res; if( Bid==Close[1]+8*Point) // change 8 Point ( 4 ==> 8 ) { res=OrderSend(Symbol(),OP_SELL,0.02,Bid,0,0,0,"",MAGICMA,0,Red); return; } }
等价表达式也许不是我们想要的,但它应该是什么?
如果读作<,那么当一个新条形图出现时,它将立即发送一个卖出指令(因为新条形图的开盘价可能小于前一个条形图的收盘价+8*点)。
如果它的读数为>,那么它将等待价格上升一点,然后发送一个卖出订单。我不太理解你的策略,所以可能是想这样。
我也可以想象你的意思。
if(Bid<Close[1]-8*Point)
你是在一个4位数的经纪商那里交易,1点等于1点?否则价格必须只移动0.8点,这可能不是你想要的(而且点差可能会进一步混淆)。
我认为你应该再看一遍你的代码,并在可能的情况下进行修正。 如果你有任何具体的问题,请随时提出。请注意,你的策略可以完全不工作,只是因为编码员误解了你的意思。
我的 策略是
如果 蜡烛 从4点到5点 出现 牛市,在 蜡烛之后 (曾经, 在任何条件下) 准备 发送 两个 买单 (如果价格 达到 我们 要求的水平 买入 一个,以及如何 达到 买入2)。
如果 蜡烛 从6 点到7点 出现 牛市,在 蜡烛之后 (曾经, 在任何条件下) 准备 发送 三个买单 (如果价格 达到 我们 要求的水平 买入 一个,以及如何 达到 买入2和3)。
我 在 买入 或 卖出 的某处 有一个小 错误,为什么 EA 不工作 ......(我 找 不到这个错误 ,但通常 EA 对 我写的东西 工作得很好 ......买入和 关闭) 但它显示了 我的 技术 计划。
我纠正了它现在的工作状态
当 你看到 底部 的时候,它变得非常 拥挤, 有时会 取代 EA 的Bull4 方案 , 方案 打开 Bull6 Bull4 ,我 意识到 它 突然 改变 你的想法 , 完成 Bull6 Bull6 。
它可以 简化 吗?
//+------------------------------------------------------------------+ //+------------------------------------------------------------------+ #define MAGICMA 20050610 //+------------------------------------------------------------------+ //| Calculate open positions HOW MEANY OF THIS | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; } } //---- return orders volume return(buys); } //+------------------------------------------------------------------+ //| Calculate candle | //+------------------------------------------------------------------+ bool BULL4() { if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point) return(true); } bool BULL6() { if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point) return(true); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpenBULL41() { int res; if(Bid==Close[1]+3*Point) { res=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue); return; } } void CheckForOpenBULL42() { int res; if(Ask>OrderOpenPrice()+2*Point) { res=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue); return; } } void CheckForOpenBULL61() { int res; if(Bid==Close[1]+4*Point) { res=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red); return; } } void CheckForOpenBULL62() { int res; if(Ask>OrderOpenPrice()+2*Point) { res=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red); return; } } void CheckForOpenBULL63() { int res; if(Ask>OrderOpenPrice()+2*Point) { res=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red); return; } } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForCloseBULL() { RefreshRates(); if(OrderOpenPrice()+4*Point< Ask) for (int i = OrdersTotal(); i >= 0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == Symbol()) { bool ticket = true; if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black); } } } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { if(BULL4()==true && CalculateCurrentOrders(Symbol())==0) CheckForOpenBULL41(); else CheckForCloseBULL(); if(CalculateCurrentOrders(Symbol())==1) CheckForOpenBULL42(); else CheckForCloseBULL(); //---// if(BULL6()==true && CalculateCurrentOrders(Symbol())==0) CheckForOpenBULL61(); else CheckForCloseBULL(); if(CalculateCurrentOrders(Symbol())==1) CheckForOpenBULL62(); else CheckForCloseBULL(); if(CalculateCurrentOrders(Symbol())==2) CheckForOpenBULL63(); else CheckForCloseBULL(); if(CalculateCurrentOrders(Symbol())==3) CheckForOpenBULL63(); else CheckForCloseBULL(); if(CalculateCurrentOrders(Symbol())==4) CheckForCloseBULL(); } //+------------------------------------------------------------------+
我的 策略是
如果 蜡烛 出现 BYK 从4到5, 蜡烛后 (永远, 在任何条件下) 准备 发送 两个数据 购买订单 (如果价格 达到 我们 要求的水平,买 一个 ,如何 达到 ZKUP 2)
如果 蜡烛 从6 到7 出现 BYK,在 蜡烛之后 (曾经, 在任何条件下) 准备 发送 三个 购买订单 (如果价格 达到 我们 要求的水平 购买 一个,以及如何 达到 zkup 2和3)。
我 在 买入 或 卖出 的某处 有一个小 错误,为什么 EA 不工作 ......(我 找 不到这个错误 ,但通常 EA 对 我写的东西 工作得很好 ......买入和 关闭) 但它显示了 我的 技术 计划。
当 你看到 底部 的时候,它变得非常 拥挤, 有时会 取代 EA 的Bull4 方案 , 方案 打开 Bull6 Bull4 ,我 意识到 它 突然 改变 你的想法 , 完成 Bull6 Bull6 。
它可以 简化 吗?
BYK ?
这是不对的 . . .
for (int i = OrdersTotal(); i >= 0;i--)
......仓位从0开始,所以你需要从OrdersTotal()-1开始倒数。
你这样做 ... ...
void CheckForCloseBull() // close ALL AT ONCE buy of course { RefreshRates(); if( OrderOpenPrice() > Ask+6*Point)
. .你得到了OrderOpenPrice(),但是是哪一个订单呢? 你会有多个订单开仓 ......
你用变量res 来保存OrderSend()调用的返回值 ... ...你对它做了什么?
非常 好的答案RaptorUK
1.分辨率问题
我在研究 EA 移动平均线 的分辨率 , 只有3次,都是 时间 的函数,之后 就 不存在了。
第一次 用于信息 "hello we will be use res"。
第二次 用于发送 订单。 OrderSend 返回 订单数,也就是 我们的 res= 343321,abowe 函数'void CheckForOpen ()' res 不存在。
但是...
我认为 , 如果 "void CheckForOpen ()" 观察 这个 命令 的真相 OrderSelect 以某种方式 带来的 数字 ,除了 "void CheckForOpen () " 我将 尝试 ......
2.OrderOpenPrice() 问题
你说得很 对, 但 这种语法 出乎意料地好用:)我 将尝试在那个地方做一些事情
3.OrdersTotal() - 1你说得很 对。
4.BYK (POLAND)=BULL 翻译有问题
对于那些 仍然不 理解我的 EA 的人, 写 一个 故事。D 嘿嘿
我们 所做的所有 步骤,都是 功能。我现在在 电脑上 写作 是一个 功能。我看 电视节目是第二个 功能,等等。
现在 让我们转移 到厨房 ......
我们有一本 烹饪书, 打开 目录 , 按顺序 阅读 。
首先,如何做 猪排 - 把 肉 放入碗中,加入盐, 胡椒, 削土豆皮。
在左边 的事件 - 右边 的功能, 和 一些主题 - 没有 ,除非 容易!"。
在阅读了 如何使 猪排开始 做 它, 做的事情。 牛排 得到 25分钟,而 当我 开始 有 一个结束。
已经过了 五分钟 M5(五分钟后),我们开始阅读 下一个点 的 烹饪书。
第二 如何做 沙拉 - 剥胡萝卜,剥 洋葱, 和其他 废话
而在这里, 神奇的 事情发生了, 因为它 创造了 双倍,枫叶 (第二人称)。 我们 同时 在猪排 和 沙拉 上 做 这个 。我们开始 在厨房里有 两个人在一起。
你读的 点数 越多, 厨房里 的人 就越多 。 厨房里 的人 在完成 自己的职责 后 会 消失 ,并洗碗。
该事件 是 蜡烛-- 具有 各种 买卖 或关闭 的选项 。
只有蜡烛 - 如何对蜡烛进行分类或分离?
请纠正我的错误!
我们有看涨和看跌的蜡烛,我想把它分开。
这就像 牧羊人一样 , 牧羊人有农场,有庄稼,有羊群。
当到了给羊剃毛的季节,牧羊人JOHN先生就去农场抓羊,然后......
捉到的第一只羊太小,无法剃毛--约翰放行。
下一只羊很好,约翰拿起剪刀,羊就脱光了。
下一只羊是好的,有大羊毛--约翰拿起大 剪刀,羊就裸体了。
下一只羊是 白羊座--约翰拿着刀,白羊座此刻是太 监。
我想用蜡烛/酒吧做同样的事情
我们的蜡烛在走,酒吧[0]....,我们等待.....,她在走,我们等待....。15分钟(M15),有了!...是什么呢?
如果我有Bullisch蜡烛和蜡烛(开盘价[1]-收盘价[1])有2个点太小 - 放手,我们什么都不做
如果我有Bullisch Candle和Candle(开盘价[1]-收盘价[1])有4个点--然后启动程序
CheckForOpenS1(); 如果我们的价格在我们的蜡烛上方+4点,则开始买入功能(情景1)
如果我有Bullisch蜡烛和蜡烛(开盘价[1]-收盘价[1])有5点-这是非常大的蜡烛-然后启动程序
CheckForOpenS2(); 如果我们的价格高于我们的蜡烛图+14点,则启动买入功能(情景2)。
我希望每个蜡烛都是这样,如果我有大的蜡烛,我想启动程序买入,如果我有太小的蜡烛,我将等待下一个。
所以......这是不正确的,但我有想法:)
请不要写没有必要的东西。