А как же вы селлимитами собираетесь защититься ?
ТЗ какое ?
ну есть на франке бай и что мы ему лепить то будем бай стоп ? селл стоп? Бай лимит что ?
Точно!!! Спасибо! Нам на бае Селл-стоп нужен. А у меня Селл-лимит.
Осталось два вопроса:
1. Отложенный ордер открывается на уровне открытия существующего ордера, а нужно чтобы к нему что-то добавлялось/отнималось (в моем коде это pointForOrder).
2. Почему не срабатывает Print?
У меня работает.
//+------------------------------------------------------------------+
//| Защитные отложенные ордера.mq4 |
//| Copyright 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern int pointForOrder = 500;
extern int Slippage = 5;
double open,pfo,volume;
int digits;
double point; // тип дабл
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
double op=0,lt=0; string sy=NULL;
for(int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
op=OrderOpenPrice();
lt=OrderLots();
sy=OrderSymbol();
point=MarketInfo(sy,MODE_POINT);
digits=(int)MarketInfo(sy,MODE_DIGITS);
if(OrderType()==OP_BUY)
{
//if(digits == 3 || digits == 5) это дикий бред
//{
// pfo *= 10;
// Slippage *= 10;
//}
open=NormalizeDouble(op -pointForOrder*point,digits);
if(OrderSend(sy,OP_SELLSTOP,lt,open,Slippage,0,0)>=0)
Print("Успешно по символу ",sy);
else
Print("Ошибка по символу ",sy," ",GetLastError()," ",open);
}
if(OrderType()==OP_SELL)
{
open=NormalizeDouble(op+pointForOrder*point,digits);
if(OrderSend(sy,OP_BUYSTOP,lt,open,Slippage,0,0)>=0)
Print("Успешно по символу ",sy);
else
Print("Ошибка по символу ",sy," ",GetLastError()," ",open);
}
}
else return;
}
//+------------------------------------------------------------------+
