-
super65
-
-
Вне сайта
-
Новый участник
-
- Сообщений: 6
- Спасибо получено: 9
-
Репутация: 1
-
|
next пишет:
Но ключевой момент опять не увидел-))..
curr_ask+(price-curr_ask)+фиксированный_тейк*curr_point; Вы хотя бы код в последнем посту смотрели?
price+фиксированный_тейк*curr_point;
Выкладываю код этой функции в финальном виде. int set_stops(int com,string pair)
{
int num,order_sl,order_tp,i,err=0;
for(i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) || (OrderMagicNumber()!=Magic && !обрабатывать_чужие)) continue;
string symbol=OrderSymbol();
num=SArrayBsearch(Пары,symbol);
if((pair!="Все" && symbol!=pair) || num==-1) continue;
int ticket=OrderTicket();
int type=OrderType();
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
double curr_ask =SymbolInfoDouble(symbol,SYMBOL_ASK);
double curr_bid =SymbolInfoDouble(symbol,SYMBOL_BID);
double curr_point=SymbolInfoDouble(symbol,SYMBOL_POINT);
int curr_spread=(int)SymbolInfoInteger(symbol,SYMBOL_SPREAD);
double curr_psar=iSAR(symbol,параболик_тф_сл,параболик_шаг_сл,параболик_макс_сл,0);
int stoplevel=(int)SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL);
if(stoplevel==0) stoplevel=(int)(2*curr_spread);
double price= OrderOpenPrice();
double lots = OrderLots();
double take = OrderTakeProfit();
double loss = OrderStopLoss();
double profit=OrderProfit()+OrderCommission()+OrderSwap();
double TPP = 0;
double SLP = 0;
double SWL = 0;
if((int)уровень_безубытка<stoplevel) уровень_безубытка=stoplevel;
//======================== ОБРАБОТКА ПОКУПОК
switch(type)
{
case OP_BUY:
{
switch(com)
{
case 2:/* *********Обработка реальных тейков *********************** */
{
if(take==0)
{
if(фиксированный_тейк!=0) order_tp=(int)фиксированный_тейк;
else order_tp=(int)(RangeCalc(symbol)*1.8);
if(price>curr_ask) TPP=NormalizeDouble(price+order_tp*curr_point,digits);
else TPP=NormalizeDouble(curr_ask+order_tp*curr_point,digits);
if(OrderModify(ticket,price,loss,TPP,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP," Ошибка:",err);
}
}
}
break;
case 3:/* *********Обработка безубытка *********************** */
{
if(loss<price || loss==0)
{
if((curr_bid-price)>уровень_безубытка*curr_point)
{
SWL=NormalizeDouble(price+уровень_безубытка*curr_point/2,digits);
if(OrderModify(ticket,price,SWL,take,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__,": Установка безубытка,пара: ",symbol,", ордер: ",ticket," безубыток=",SWL);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__,": Установка безубытка,пара: ",symbol,", ордер: ",ticket," безубыток=",SWL," Ошибка:",err);
}
}
}
}
break;
case 0:/* *********Обработка реальных стопов *********************** */
case 1:
{
if(стопы_по_параболику)// Стоп по параболику. Если параболик выше цены - ждем.
{
if((curr_bid-curr_psar)>stoplevel*curr_point) SLP=NormalizeDouble(curr_psar,digits);
}
else
{
if(фиксированный_стоп!=0) order_sl=(int)фиксированный_стоп; // Фиксированный стоп - приоритет.
else order_sl=RangeCalc(symbol); // Рассчетный стоплосс
SLP=NormalizeDouble(curr_bid-order_sl*curr_point,digits);
}
switch(com)
{
case 0:
{
if(SLP!=0 && SLP!=loss)
{
if(loss==0 || ((SLP-loss)>шаг_трала_в_пунктах*curr_point && (profit>0 || !только_профит)))
{
if(OrderModify(ticket,price,SLP,take,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__,": Модификация трейлстопа,пара: ",symbol,", ордер: ",ticket," стоп=",SLP);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__,": Модификация трейлстопа,пара: ",symbol,", ордер: ",ticket," стоп=",SLP," Ошибка:",err);
}
}
}
}
break;
case 1:
{
if(SLP!=0 && SLP!=loss)
{
if(OrderModify(ticket,price,SLP,take,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__,": Принудительная установка/сдвиг стопа, point=",curr_point);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__,": Принудительная установка/сдвиг стопа, point=",curr_point," Ошибка:",err);
}
}
}
break;
default: break;
}
}
break;
default: break;
}
} //BUY
break;
//======================== ОБРАБОТКА ПРОДАЖ
case OP_SELL:
{
switch(com)
{
case 2:/* *********Обработка реальных тейков *********************** */
{
if(take==0)
{
if(фиксированный_тейк!=0) order_tp=(int)фиксированный_тейк;
else order_tp=(int)(RangeCalc(symbol)*1.8);
if(price>curr_bid) TPP=NormalizeDouble(curr_bid-order_tp*curr_point,digits);
else TPP=NormalizeDouble(price-order_tp*curr_point,digits);
if(OrderModify(ticket,price,loss,TPP,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP," Ошибка:",err);
}
}
}
break;
case 3:/* *********Обработка безубытка *********************** */
{
if(loss>price || loss==0)
{
if((price-curr_ask)>уровень_безубытка*curr_point)
{
SWL=NormalizeDouble(price-уровень_безубытка*curr_point/2,digits);
if(OrderModify(ticket,price,SWL,take,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__,": Установка безубытка,пара: ",symbol,", ордер: ",ticket," безубыток=",SWL);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__,": Установка безубытка,пара: ",symbol,", ордер: ",ticket," безубыток=",SWL," Ошибка:",err);
}
}
}
}
break;
case 0:/* *********Обработка реальных стопов *********************** */
case 1:
{
if(стопы_по_параболику)
{
if((curr_psar-curr_ask)>stoplevel*curr_point) SLP=NormalizeDouble(curr_psar,digits);
}
else
{
if(фиксированный_стоп!=0) order_sl=(int)фиксированный_стоп; // Фиксированный стоп - приоритет.
else order_sl=RangeCalc(symbol); // Рассчетный стоплосс
SLP=NormalizeDouble(curr_ask+order_sl*curr_point,digits);
}
switch(com)
{
case 0:
{
if(SLP!=0 && SLP!=loss)
{
if(loss==0 || ((loss-SLP)>шаг_трала_в_пунктах*curr_point && (profit>0 || !только_профит)))
{
if(OrderModify(ticket,price,SLP,take,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__,": Модификация стопа,пара: ",symbol,", ордер: ",ticket," стоп=",SLP);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__,": Модификация стопа,пара: ",symbol,", ордер: ",ticket," стоп=",SLP," Ошибка:",err);
}
}
}
}
break;
case 1:
{
if(SLP!=0 && SLP!=loss)
{
if(OrderModify(ticket,price,SLP,take,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__+": Принудительная установка/сдвиг стопа, point=",curr_point);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__+": Принудительная установка/сдвиг стопа, point=",curr_point," Ошибка:",err);
}
}
}
break;
default: break;
}
}
break;
default: break;
}
} //SELL
break;
default: break;
}
} // for
return(err);
} В функции main() было if(трейлинг_стоп || безубыток) set_stops(0,"Все");
if(тейки_разрешены) set_stops(2,"Все"); стало if(трейлинг_стоп) set_stops(0,"Все");
if(тейки_разрешены) set_stops(2,"Все");
if(безубыток) set_stops(3,"Все"); В функции orders() было стало |