Auftrag beendet
Spezifikation
Имеем робота, который раскидывает сеть ордеров по заданным параметрам.
Требуется дополнить его функцией контроля за открытыми ордерами.
При исполнении какого-либо из установленных лимитных ордеров требуется выставление нового (новых) ордеров для непрерывной работы сетки -
при движении цены вниз исполняется лимитный ордер на покупку = нужно открыть лимитный ордер на продажу на 200 пунктов выше.
при движении цены вверх исполняется лимитный ордер на продажу = нужно открыть лимитный ордер на покупку на 200 пунктов ниже.
на исполнение takeprofit можно внимания не обращать.
Никакие индикаторы и прочие приблуды не нужны.
double grid = 0.001;
int buyorders = 10;
int sellorders = 10;
double vol =0.1;
void OnStart()
{
MqlTradeRequest request={};
MqlTradeResult result={};
request.action =TRADE_ACTION_PENDING;
request.volume =vol;
request.symbol =Symbol();
request.deviation=2;
request.magic =9600000;
double price;
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
request.type = ORDER_TYPE_BUY_LIMIT;
int count;
double offset;
offset=grid;
for (count=1; count<buyorders; count++)
{
price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset;
request.price=price;
request.tp=price+grid;
offset=offset+grid;
OrderSend(request,result);
}
request.type = ORDER_TYPE_SELL_LIMIT;
offset=0.0003;
for (count=1; count<sellorders; count++)
{
price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset;
request.price=price;
request.tp=price-grid;
offset=offset+grid;
OrderSend(request,result);
}
}