//+------------------------------------------------------------------+string lSymbol;
int init ()
{
lSymbol = Symbol();
return (0);
}
int deinit()
{return(0);}
int start()
{
double MacdCurrent, MacdPrevious, SignalCurrent;
double SignalPrevious, MaCurrent, MaPrevious;
double bid, ask, point, digits;
int cnt, ticket, total;
total = SymbolOrdersTotal (lSymbol);
if (total<1);
{
bid = MarketInfo(lSymbol,MODE_BID);
ask = MarketInfo(lSymbol,MODE_ASK);
point = MarketInfo(lSymbol,MODE_POINT);
digits= MarketInfo(lSymbol,MODE_DIGITS);
Так выглядит оснавная часть, а это злопалучный блок закрытия
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==lSymbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*point))
{
OrderClose(OrderTicket(),OrderLots(),bid,3,Violet); // close positionreturn(0); // exit
}
// check for trailing stopif(TrailingStop>0)
{
if(bid-OrderOpenPrice()>point*TrailingStop)
{
if(OrderStopLoss()<bid-point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),bid-point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else// go to short position
{
// should it be closed?if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*point))
{
OrderClose(OrderTicket(),OrderLots(),ask,3,Violet); // close positionreturn(0); // exit
}
// check for trailing stopif(TrailingStop>0)
{
if((OrderOpenPrice()-ask)>(point*TrailingStop))
{
if((OrderStopLoss()>(ask+point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),ask+point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
int SymbolOrdersTotal(string lSymbol)
{
int Res=0;
int total=OrdersTotal();
for (int i=0;i<total;i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()==lSymbol)
{
Res++;
}
}
}
return(Res);
}
// the end.
インジケーターのロジックを完全に分解する。
まずは交換してください。
で
また
それ以外の場合、最初のブロックが最初に実行され、次に2番目のブロックが実行されます。With else - 前者か後者のどちらかです。
3番までのバーがあれば全て動作するようですが、トレードはしていません、何が問題なのでしょうか?
また、インジケーターのロジックについては、少し混乱しています。私はインディケータがどのように動作するかを知っている、私はちょうどifractalsがゼロに等しくないことを確認するアルゴリズムが必要であり、あなたは私にこの条件を削除するように提供し、それは余分なのですか? なぜ私はそれを二回書くのですか?
インジケーターのロジックを完全に分解する。
まずは交換してください。
で
さらに
それ以外の場合、最初のブロックが最初に実行され、次に2番目のブロックが実行されます。With else - 前者か後者のどちらかです。
戦うことが可能であり、EAの作業を中断することも可能である。アプローチを変えればいいのです。
どうやって?
コードの冒頭で、すべての未決済注文を調べ、チケットの値を 注文に割り当てる、または他の方法がありますか?
コードの冒頭で、すべての未決済注文を調べ、チケットの値を注文に割り当てる、または他の方法がありますか?
EAが1つまたは2つのポジションを開く場合、これを行うことができます。
顧問が1~2ポジションを開けてくれればOKです。
EAは多通貨対応なので、単純な操作では一発で解決しないこともあるようです((。そして、経験もない。
私のExpert Advisorは多通貨対応で、簡単な操作では一度で解決しないことが多いようです((.そして、経験もない。
注文会計を正しく行うだけでいいのです。いろいろな例がありますね。
そして、経験。経験がものを言う。どこにも行きません。
注文が正しく記録されるようにすればよいのです。例はいくらでもある。
そして、経験。経験がものを言う。どこにも行かない。
回答ありがとうございました!アーカイブを掘ってみます。
こんばんは、多通貨MACD Expert Advisorの件でご相談です。EAはポジションのオープン基準に正しく従いますが、「条件付き」クローズは機能しません。確かにトレーリングストップを使うようになったが、正しい終値では休みにならない。
主要部分はこんな感じです。
そして、これがエンディングブロックです。エラーを発見するために助けてください
何度もすみませんが、いくらあがいてもエラーが見つかりません
全部入れ替えたけど、なぜか同じように飛んでる・・・((((;゜Д゜)))