И такой вопрос, Ваша последняя запись не обьясняет, почему в старом коде советник по сто раз заходил не на уровне 70, а посередке (где-то 50 "на глаз"). Или это по той причине, что я указал условие входа, но не указал при какой цене нужно заходить?
//--- Проверяем, есть ли открытая позиция по данному символуbool IsBuyExists=false;
bool IsSellExists=false;
if(OrdersTotal()>0)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
//--- фильтрация позиции по текущему символуif(OrderSymbol()!=_Symbol) continue;
//--- есть ли позиция на покупкуif(OrderType()==OP_BUY)
IsBuyExists==true;
//--- есть ли позиция на продажуif(OrderType()==OP_SELL)
IsSellExists==true;
}
}
}
}
//--- открытие позиции на покупкуif(OP_B==true && IsBuyExists==false)
{
double SL=NormalizeDouble(Bid-Something*_Point,_Digits); // Вычисление SL откр.double TP=NormalizeDouble(Bid+Something*_Point,_Digits); // Вычисление TP откр.
RefreshRates(); // Обновление данныхif(OrderSend(_Symbol,OP_BUY,Lots,Ask,100,SL,TP)!=0)
{
Alert("Не удалось открыть позицию Buy. Ошибка = ",GetLastError());
return;
}
else
{
Alert("Удалось открыть позицию Buy.");
return;
}
}
Спасибо!!! Я не понимаю, советник не сохраняет данные по сделанной операции? а закрыть ордер другого символа он тоже может? (если не прописать того, что сделали Вы)... А если прописать при какой цене заходить (в строках рядом со стоплосом и ТР), то советник попробует зайти (если будет в наличие ) при заданой цене? А если заданная цена "будет мешать" условиям входа в сделку, то советник все равно зайдет или будет ждать, чтобы оба условия сошлись?
Выкладываю блок закрытий. Надеюсь в этот раз исправлений будет меньше))):
//--- Проверяем, есть ли открытая позиция по данному символуbool IsBuyExists=false;
bool IsSellExists=false;
bool _iCloseSell=false;
bool _iCloseBuy=false;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if(OrdersTotal()>0)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
//--- фильтрация позиции по текущему символуif(OrderSymbol()!=_Symbol) continue;
//--- есть ли позиция на покупкуif(OrderType()==OP_BUY)
IsBuyExists==true;
//--- есть ли позиция на продажуif(OrderType()==OP_SELL)
IsSellExists==true;
}
}
}
}
//--- закрытие позиции Байif(Cl_B==true && IsBuyExists==true)
{
RefreshRates();
if(_CloseBuy=OrderClose(Ticket,Lot,Bid,2))
_iCloseBuy==true;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if(_iCloseBuy==false)
{
Alert("Не удалось закрыть позицию Buy. Ошибка = ",GetLastError());
return;
}
}
//--- закрытие позиции Селif(Cl_S==true && IsSellExists==true)
{
RefreshRates();
if(_CloseSell=OrderClose(Ticket,Lot,Ask,2))
_iCloseSell==true;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+if(_iCloseSell==false)
{
Alert("Не удалось закрыть позицию Sell. Ошибка = ",GetLastError());
return;
}
}
//+------------------------------------------------------------------+
ааа, я так понимаю, у меня в старом коде каждую минуту закрывался/открывался новый ордер по этой же причине?
Спасибо!!! Я не понимаю, советник не сохраняет данные по сделанной операции? а закрыть ордер другого символа он тоже может? (если не прописать того, что сделали Вы)... А если прописать при какой цене заходить (в строках рядом со стоплосом и ТР), то советник попробует зайти (если будет в наличие ) при заданой цене? А если заданная цена "будет мешать" условиям входа в сделку, то советник все равно зайдет или будет ждать, чтобы оба условия сошлись?
Выкладываю блок закрытий. Надеюсь в этот раз исправлений будет меньше))):