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)にExpert Advisorがあり、他のウィンドウ(例えばAUDUSD、EURUSDなど)で特定の瞬間に矢印(ObjectCreate)を設定する必要があります。
ObjectCreate ヘルパーを見ると、インジケータやExpert Advisorが配置されている、1つのオープンチャート内でのみ動作することが明確にわかります。出力は、グローバル変数またはファイルを通じて、任意のウィンドウのExpert Advisorにデータを転送することができます。
ObjectCreate ヘルパーを見ると、インジケータやExpert Advisorが配置されている、1つのオープンチャート内でのみ動作することが明確にわかります。出力は、グローバル変数またはファイルを通じて、必要なウィンドウのExpert Advisorにデータを転送することができます。
つまり、別のウィンドウから行う方法はないのでしょうか?>> ありがとうございました。
この保留注文の修正機能を外部 変数で無効にするにはどうしたらよいですか?
この保留注文の修正機能を外部変数で無効にするにはどうしたらよいですか?
>>こんな感じです。
ありがとうございました。ヴァインだ!
>> やってみます(笑)
プログラマーさん、助けてください!すでに開いている注文でも開く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);
}
このセリフに阻まれている可能性が高いです。
まずはここから始めましょう。これは削除すべきです。
AND 買いと売りのエントリー機構を分離する。I.Kimの関数を利用する(コードの一番最後に挿入する)。
そうすると、取引開始の条件が買いとなる。
そして、売りの取引を開始する条件 :
この問題は、おそらく2003年以前に解決されているのですが、知らない人がいるので、共有します)))
チャート上で右クリック - プロパティを選択 - 一般タブ - 固定スケールにチェックを入れる - OK
次に、価格スケールの上にマウスを置き、左クリックしたまま、マウスを上下に動かしてスケールを調整します。
メインウィンドウに表示されている場合もあるので、遠くを見る必要はないでしょう。
チャンネルEA
すでに注文が開いている場合でも、EAに注文を開くように依頼したい。これはチャンネルEAで、あるラインなどにタッチするたびに、対応する注文をオープンする必要があります。このEAは、1つの注文を出すと、それが閉じるまで次の注文を出さないと思います。
上の投稿で説明したことを実行しました。ポジション数関数を挿入し、最後のポジション開放ブロックをこのように置き換えた。
EAは少なくとも2つのポジションを同時に保持することができるようになりました。
すみません、チャンネルを描画するインジケータを添付し忘れているので、テストできません。