for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++; if (OrderType()==OP_BUYSTOP) if (сигнал_bue) OrderDelete(OrderTicket()); else b++; if (OrderType()==OP_SELLSTOP) if (сигнал_sell) OrderDelete(OrderTicket()); else s++; } }
for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++; if (OrderType()==OP_BUYSTOP) if (сигнал_bue) OrderDelete(OrderTicket()); else b++; if (OrderType()==OP_SELLSTOP) if (сигнал_sell) OrderDelete(OrderTicket()); else s++; } }
そして、引数が用意されているので、その引数を関数に渡します。外した方が良いとはいえ、トートロジーである。
また、ループ内のすべての注文が再計算されるわけではありません。
上書きのあるチケットで、マーチンのある最後のオーダーから作業します。
そして、'count' hides グローバル宣言の行を削除する方法です。
として機能させるのが面白い。
今のところ、テスターはかなり良い結果を示していますが、時々「Expert Advisorで乗り越えられないエラー」が発生します。
ごあいさつ
このフォーマットでの録音を偶然発見。
すなわち...ここでは、条件付きif文が、式ではなくbool型 取引関数に置き換えられて いるのです。このような書き込みは、イコール...という理解でよいのでしょうか?
if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?
ヘルプとチュートリアルの両方を見ましたが、そのような形式は見つかりませんでした。
この方法で、式の代わりに別の型の関数を直接記述することはできますか?また、その場合、どのようなアルゴリズムになるのでしょうか。
修正しました。引数を入れてグローバルスコープにすると、この引数はすでに他の関数で入力として使用されているという警告が発生します。
上書きのあるチケット、マーティンとの最後の注文からの作業
そして、'count' の宣言を削除すると、その行でグローバル宣言が隠れます。
本来の機能を発揮させることができるのが面白い。
今のところ、テスターはかなり良い結果を示していますが、時々「Expert Advisorで乗り越えられないエラー」が発生します。
ごあいさつ
このフォーマットでの録音を偶然発見。
すなわち...ここでは、条件付きif文が、式ではなくbool型 取引関数に置き換えられて いるのである。このような書き込みは、イコール...という理解でよいのでしょうか?
if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?
ヘルプとチュートリアルの両方を見ましたが、そのような形式は見つかりませんでした。
この方法で、式の代わりに別の型の関数を直接記述することはできますか?その場合、どのようなアルゴリズムになるのでしょうか?
ただ、if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; は動作しない でしょう。条件は括弧の外に投げてはならない。
しかし、もし(OrderSelect(ticket,SELECT_BY_TICKET)==true) ならば{OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; ができる。
ちょうど、if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; が動作しない のと同じです。条件は括弧の外に投げてはならない。
しかし、もし(OrderSelect(ticket,SELECT_BY_TICKET)==true) ならば{OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; ができる。
コードがないと推測になってしまうので、修正したものを見せてください。
なるほど。
できることは、なんとなく終わらせた。描写はできている。目標は、なぜ思い通りに動かないのかを理解することです。
//| ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss = 1000; //Стоплосс ордера
extern double TakeProfit = 1500; //Тейкпрофит ордера
extern double TrailingStop = 1000; // трал
extern int Delta = 100; //Расстояние от цены для установки ордера
extern double LOT = 0.1; //Объём позиции
extern int Magic =200;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (TrailingStop!=0) Trailing();
//ИНДИКАТОР RSI
double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
int b,s,p,res;
double BuyPrice=Ask+Delta*Point;
double SellPrice=Bid-Delta*Point;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP) b++;
if (OrderType()==OP_SELLSTOP) s++;
}
}
double SL,TP;
//---- buy stop
if(RSI0>50&&RSI1<50)
{
res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
}
//---- sell stop
if(RSI0<50&&RSI1>50)
{
res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red );
}
//---- buy stop делете
if(RSI0<50&&RSI1>50)
{
OrderDelete( OrderTicket());
}
//---- sell stop делете
if(RSI0>50&&RSI1<50)
{
OrderDelete( OrderTicket());
}
//----
return(0);
}
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------
void Trailing()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()||OrderMagicNumber()==Magic)
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>TrailingStop)
{
if(OrderStopLoss()<Bid-TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
if(OrderType()==OP_SELL)
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>TrailingStop)
{
if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
で、未開封の注文のチケットはどうやって手に入れたのでしょうか?
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP)
if (сигнал_bue) OrderDelete(OrderTicket());
else b++;
if (OrderType()==OP_SELLSTOP)
if (сигнал_sell) OrderDelete(OrderTicket());
else s++;
}
}
そうでしょう、どうしても入れられないんです。
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP)
if (сигнал_bue) OrderDelete(OrderTicket());
else b++;
if (OrderType()==OP_SELLSTOP)
if (сигнал_sell) OrderDelete(OrderTicket());
else s++;
}
}