extern double Lots = 1.0; extern int Slippage = 5; extern int TimeOut = 10000;
double SetLevel(double Level, double NewLevel, string ObjName, int Style) { switch (Style) { case 1: // Buy Order line ObjectSet(ObjName,OBJPROP_COLOR,Blue); ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(ObjName,OBJPROP_WIDTH,2); break; case 2: // Sell Order line ObjectSet(ObjName,OBJPROP_COLOR,Red); ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(ObjName,OBJPROP_WIDTH,2); break; case 3: // Buy Stop line ObjectSet(ObjName,OBJPROP_COLOR,Blue); ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH); ObjectSet(ObjName,OBJPROP_WIDTH,1); break; case 4: // Sell Stop line ObjectSet(ObjName,OBJPROP_COLOR,Red); ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH); ObjectSet(ObjName,OBJPROP_WIDTH,1); break; case 5: // Buy Take line ObjectSet(ObjName,OBJPROP_COLOR,Blue); ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT); ObjectSet(ObjName,OBJPROP_WIDTH,1); break; case 6: // Sell Take line ObjectSet(ObjName,OBJPROP_COLOR,Red); ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT); ObjectSet(ObjName,OBJPROP_WIDTH,1); break; }
>> 请告知。我在一个窗口中有一个专家顾问(例如,USDJPY),我需要它在其他打开的窗口中的某个时刻设置箭头(ObjectCreate),例如,AUDUSD,EURUSD等。
如果你看一下ObjectCreate 助手,你可以清楚地看到,它只在一个开放的图表中工作,指标或专家顾问位于该图表上。输出可以是通过全局变量或文件将数据传输到所需窗口的专家顾问。
如果你看一下ObjectCreate 助手,你可以清楚地看到,它只在一个开放的图表中工作,指标或专家顾问位于该图表上。输出可以是通过全局变量或文件将数据传输到所需窗口的专家顾问。
也就是说,没有办法从另一个窗口进行操作?>> 谢谢你。
如何通过外部变量 禁用该挂单修改功能?
如何通过外部变量禁用该挂单修改功能?
>>这样的东西。
谢谢你!Vinin!
>>我试试吧)。
程序员,请帮助,我需要一个EA来打开订单,即使它们已经打开。这是一个通道式EA,每当一条线触及其中一条线时,相应的订单就应该被打开。我想事先感谢你。
//+------------------------------------------------------------------+
//| TradeChannel.mq4 |
//| Copyright © 2005, Yuri Makarov |
//| http://mak.tradersmind.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Yuri Makarov"
#property link "http://mak.tradersmind.com"
extern double Lots = 1.0;
extern int Slippage = 5;
extern int TimeOut = 10000;
double SetLevel(double Level, double NewLevel, string ObjName, int Style)
{
switch (Style)
{
case 1: // Buy Order line
ObjectSet(ObjName,OBJPROP_COLOR,Blue);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(ObjName,OBJPROP_WIDTH,2);
break;
case 2: // Sell Order line
ObjectSet(ObjName,OBJPROP_COLOR,Red);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(ObjName,OBJPROP_WIDTH,2);
break;
case 3: // Buy Stop line
ObjectSet(ObjName,OBJPROP_COLOR,Blue);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
case 4: // Sell Stop line
ObjectSet(ObjName,OBJPROP_COLOR,Red);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
case 5: // Buy Take line
ObjectSet(ObjName,OBJPROP_COLOR,Blue);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
case 6: // Sell Take line
ObjectSet(ObjName,OBJPROP_COLOR,Red);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
}
if (MathAbs(NewLevel - Close[0]) < MathAbs(Level - Close[0])) return (NewLevel);
else return (Level);
}
int start()
{
int NumObj = ObjectsTotal();
double Spread = Ask - Bid;
double pBuy = 0;
double pSell = 0;
double pBuyStop = 0;
double pBuyTake = 0;
double pSellStop = 0;
double pSellTake = 0;
for (int i = 0; i < NumObj; i++)
{
string ObjName = ObjectName(i);
string ObjDesc = ObjectDescription(ObjName);
double Price = 0;
switch (ObjectType(ObjName))
{
case OBJ_HLINE:
Price = ObjectGet(ObjName,OBJPROP_PRICE1);
break;
case OBJ_TREND:
Price = ObjectGetValueByShift(ObjName,0);
break;
}
if (Price > 0)
{
if (ObjDesc == "Buy") pBuy = SetLevel(pBuy, Price, ObjName, 1); else
if (ObjDesc == "Sell") pSell = SetLevel(pSell, Price, ObjName, 2); else
if (ObjDesc == "Stop")
{
if (Price < Close[0]) pBuyStop = SetLevel(pBuyStop, Price, ObjName, 3);
else pSellStop = SetLevel(pSellStop, Price, ObjName, 4);
} else
if (ObjDesc == "Take")
{
if (Price > Close[0]) pBuyTake = SetLevel(pBuyTake, Price, ObjName, 5);
else pSellTake = SetLevel(pSellTake, Price, ObjName, 6);
}
}
}
int NumOrders = OrdersTotal();
int NumPos = 0;
for (i = 0; i < NumOrders; i++)
{
OrderSelect(i, SELECT_BY_POS);
if (OrderSymbol() != Symbol()) continue;
NumPos++;
double tp = OrderTakeProfit();
double sl = OrderStopLoss();
if (OrderType() == OP_BUY)
{
if (Bid > pSell && pSell > 0)
{
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Red);
Sleep(TimeOut);
return(0);
}
if (MathAbs(tp - pBuyTake) > Spread || MathAbs(sl - pBuyStop) > Spread)
{
OrderModify(OrderTicket(), Ask, pBuyStop, pBuyTake, 0);
Sleep(TimeOut);
return(0);
}
}
if (OrderType() == OP_SELL)
{
if (Ask < pBuy)
{
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
Sleep(TimeOut);
return(0);
}
if (MathAbs(tp - pSellTake) > Spread || MathAbs(sl - pSellStop) > Spread)
{
OrderModify(OrderTicket(), Bid, pSellStop, pSellTake, 0);
Sleep(TimeOut);
return(0);
}
}
}
if (NumPos > 0) return(0);
if ((pSell - pBuy) < Spread*2) return(0);
if (Bid > pSell && pSell > pBuyStop)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, pSellStop, pSellTake);
Sleep(TimeOut);
return(0);
}
if (Ask < pBuy && (pBuy < pSellStop || pSellStop == 0))
{
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, pBuyStop, pBuyTake);
Sleep(TimeOut);
return(0);
}
}
int init()
{
return(0);
}
int deinit()
{
return(0);
}
你很可能受到这条线路的阻碍。
我们可以从这个开始。这应该被删除。
并将买入和卖出的进入机制分开。以I.Kim的函数为例(在代码的最末端插入它)
那么交易开始的条件将是购买。
而打开卖出交易的条件:
这个问题可能在2003年以前就已经解决了。 但既然有人不知道,我就分享一下吧)))。
右键单击图表 - 选择属性 - 常规选项卡 - 勾选固定比例 - 确定
然后将鼠标悬停在价格刻度上,左键点击并保持按下,向上/向下移动鼠标来调整刻度。
你可能把它放在主窗口里,所以你不必看远。
渠道EA
我想要求EA打开订单,即使它们已经打开了。这是一个通道式EA,每当触及某条线或其他线时,相应的订单应该被打开。我认为这个EA将打开一个订单,并在关闭之前不打开另一个订单。
我做了我在上面的帖子中描述的事情。我插入了位置数函数,并将最后的位置开放块替换为这个。
现在,EA可以同时持有至少2个位置。
对不起,我无法测试,因为你忘了附上绘制通道的指标。