Добро пожаловать,
Гость
|
Версии советника для терминала MetaTrader 4 версий старше 600
Внимание! В этой теме обсуждаем только работу советника. Всякие ахи, охи, оверквотинг, и любые разговоры, не связанные непосредственно с работой и настройкой советника запрещены.
Внимание! В этой теме обсуждаем только работу советника. Всякие ахи, охи, оверквотинг, и любые разговоры, не связанные непосредственно с работой и настройкой советника запрещены.
ТЕМА: BasketBull11_4
BasketBull11_4 26 Май 2016 09:25 #997
|
Вот секс.. поправил старые функции,.. все ведь лень была переделать. |
Администратор запретил публиковать записи гостям. |
BasketBull11_4 26 Май 2016 10:27 #998
|
super65 пишет:
The_Siberian пишет:
поставил что поменяно в коде? #import "user32.dll"
int PostMessageW(int hWnd,int Msg,int wParam,int lParam);
int RegisterWindowMessageW(string lpString);
#import
void reconn()
{
int hwnd=WindowHandle(Symbol(),Period());
int MT4InternalMsg=RegisterWindowMessageW("MetaTrader4_Internal_Message");
int hMetaTrader= hwnd;
if(hMetaTrader!=0)
{
PostMessageW(hMetaTrader,WM_COMMAND,37400,NULL); // пересканировать серверы
}
return;
} Сергей, (если не ошибаюсь) может тогда поможешь и с проблемой перестановки тейков? переустановка при перезапуске, то есть условно тейк выставлен в среду, а в понедельник при запуске сов переустанавлевает их по новому диапазону в ном числе и в минус зарание спасибо! |
Администратор запретил публиковать записи гостям. |
BasketBull11_4 26 Май 2016 16:17 #1003
|
По быстрому вот так /* *********Обработка реальных тейков фиксированые *********************** */
if(тейки_разрешены && take==0)
{
if(фиксированный_тейк!=0){
if (price>curr_ask)TPP=curr_ask+(price-curr_ask)+фиксированный_тейк*curr_point;
}
else
{
if (price<curr_ask)TPP=curr_ask+фиксированный_тейк*curr_point;
}
if(OrderModify(ticket,price,loss,NormalizeDouble(TPP,digits),0,clrNONE))
{
if(расширенный_отладчик) Print(StringConcatenate(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP));
}
else
{RefreshRates();
err=GetLastError();
if(расширенный_отладчик) Print(StringConcatenate(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP," Ошибка:",err));
}
}
/* *********Обработка реальных тейков диапазон*********************** */
if(тейки_разрешены && take==0)
{
if(фиксированный_тейк==0){
if (price>curr_ask)TPP=curr_ask+(price-curr_ask)+RangeCalc(symbol)*curr_point*1.8;
}
else
{
if (price<curr_ask)TPP=curr_ask+RangeCalc(symbol)*curr_point*1.8;
}
if(OrderModify(ticket,price,loss,NormalizeDouble(TPP,digits),0,clrNONE))
{
if(расширенный_отладчик) Print(StringConcatenate(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP));
}
else
{ RefreshRates();
err=GetLastError();
if(расширенный_отладчик) Print(StringConcatenate(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP," Ошибка:",err));
}
}
//=========================продажа========================================
/* *********Обработка реальных тейков фиксированый*********************** */
if(тейки_разрешены && take==0)
{
if(фиксированный_тейк!=0){
if (curr_bid>price) TPP=curr_bid-(curr_bid-price)-фиксированный_тейк*curr_point;
}
else
{
if (curr_bid<price) TPP=curr_bid-фиксированный_тейк*curr_point;
}
if(OrderModify(ticket,price,loss,TPP,0,clrNONE))
{
if(расширенный_отладчик) Print(StringConcatenate(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP));
}
else
{RefreshRates();
err=GetLastError();
if(расширенный_отладчик) Print(StringConcatenate(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP," Ошибка:",err));
}
}
/* *********Обработка реальных тейков фиксированый*********************** */
if(тейки_разрешены && take==0)
{
if(фиксированный_тейк==0){
if (curr_bid>price) TPP=curr_bid-(curr_bid-price)-RangeCalc(symbol)*curr_point;
}
else
{
if (curr_bid<price) TPP=curr_bid-RangeCalc(symbol)*curr_point;
}
if(OrderModify(ticket,price,loss,NormalizeDouble(TPP,digits),0,clrNONE))
{
if(расширенный_отладчик) Print(StringConcatenate(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP));
RefreshRates();
}
else
{RefreshRates();
err=GetLastError();
if(расширенный_отладчик) Print(StringConcatenate(__FUNCTION__,": Установка тейка,пара: ",symbol,", ордер: ",ticket," тейк=",TPP," Ошибка:",err));
}
} |
Администратор запретил публиковать записи гостям. |
BasketBull11_4 26 Май 2016 16:44 #1004
|
Но если по правильному.. то нужно этот алгоритм качественно перетряхнуть.. |
Администратор запретил публиковать записи гостям. |
BasketBull11_4 26 Май 2016 16:57 #1005
|
next пишет:
Но если по правильному.. то нужно этот алгоритм качественно перетряхнуть.. все в твоих руках..... и х.....й и вазелин! ждем результаты! |
Администратор запретил публиковать записи гостям. |
BasketBull11_4 27 Май 2016 13:45 #1023
|
Присоединяюсь к ожидающим |
Администратор запретил публиковать записи гостям. |
BasketBull11_4 03 Июнь 2016 22:25 #1103
|
Причесал функцию set_stops! ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] //+------------------------------------------------------------------+
//| УСТАНОВКА СТОПОВ И ТЕЙКОВ
//+------------------------------------------------------------------+
int set_stops(int com,string pair)
{
int num,order_sl,i,err=0;
for(i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) || (OrderMagicNumber()!=Magic && обрабатывать_чужие==false)) 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 TPP = 0;
double SLP = 0;
double SWL = 0;
if((int)уровень_безубытка<stoplevel) уровень_безубытка=stoplevel;
//======================== ОБРАБОТКА ПОКУПОК
switch(type)
{
case OP_BUY:
{
/* *********Обработка реальных тейков *********************** */
if(тейки_разрешены && take==0)
{
if(фиксированный_тейк!=0) TPP=NormalizeDouble(curr_ask+фиксированный_тейк*curr_point,digits);
else TPP=NormalizeDouble(curr_ask+RangeCalc(symbol)*curr_point*1.8,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);
}
}
/* *********Обработка безубытка *********************** */
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);
}
}
}
/* *********Обработка реальных стопов *********************** */
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);
}
if(трейлинг_стоп || (управление_локами && com==3))
{
if((SLP-loss)>шаг_трала_в_пунктах*curr_point && (OrderProfit()>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);
}
}
}
if(com==1)
{
if(OrderModify(ticket,price,SLP,take,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__,": Принудительная установка/сдвиг стопа, point=",curr_point);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__,": Принудительная установка/сдвиг стопа, point=",curr_point," Ошибка:",err);
}
}
} //BUY
break;
//======================== ОБРАБОТКА ПРОДАЖ
case OP_SELL:
{
/* *********Обработка реальных тейков *********************** */
if(тейки_разрешены && take==0)
{
if(фиксированный_тейк!=0) TPP=NormalizeDouble(curr_bid-фиксированный_тейк*curr_point,digits);
else TPP=NormalizeDouble(curr_bid-RangeCalc(symbol)*curr_point*1.8,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);
}
}
/* *********Обработка безубытка *********************** */
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);
}
}
}
/* *********Обработка реальных стопов *********************** */
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);
}
if(трейлинг_стоп)
{
if(loss==0 || ((loss-SLP)>шаг_трала_в_пунктах*curr_point && (OrderProfit()>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);
}
}
}
if(com==1)
{
if(OrderModify(ticket,price,SLP,take,0,clrNONE))
{
if(расширенный_отладчик) Print(__FUNCTION__+": Принудительная установка/сдвиг стопа, point=",curr_point);
}
else
{
err=GetLastError();
if(расширенный_отладчик) Print(__FUNCTION__+": Принудительная установка/сдвиг стопа, point=",curr_point," Ошибка:",err);
}
}
} //SELL
break;
default: break;
}
} // for
return(err);
} |
Администратор запретил публиковать записи гостям.
Спасибо сказали: next, The_Siberian |
BasketBull11_4 04 Июнь 2016 14:44 #1104
|
super65 пишет:
Причесал функцию set_stops! Спасибо за участие, и внимание..Ключевая ошибка, на которую жаловались, и я на нее тоже напоролся кроется вот здесь..Это то что подправлено..if (price>curr_ask)TPP=curr_ask+(price-curr_ask)+фиксированный_тейк*curr_point; TPP=curr_ask+фиксированный_тейк*curr_point; При попытке переустановки тейка по парам которые уже ушли в просадку, тейк ставился наже или выше цены открытия, в зависимости от направления, если дистанция тейка была меньше просадки.. по сути ставился стоп-лосс. ЗЫ.. Эта ситуация может произойти только при установке тейков через какое то время просле открытия,.. или переустановки, то есть старые удалили, а новые рассчетные или фиксированные поставили.Если установка происходит сразу после открытия позы, то все ставится корректно!! Важно понимать в чем была проблема. |
Администратор запретил публиковать записи гостям. |
BasketBull11_4 04 Июнь 2016 22:24 #1105
|
next пишет:
super65 пишет:
Причесал функцию set_stops! Спасибо за участие, и внимание..Ключевая ошибка, на которую жаловались, и я на нее тоже напоролся кроется вот здесь..Это то что подправлено..if (price>curr_ask)TPP=curr_ask+(price-curr_ask)+фиксированный_тейк*curr_point; TPP=curr_ask+фиксированный_тейк*curr_point; При попытке переустановки тейка по парам которые уже ушли в просадку, тейк ставился наже или выше цены открытия, в зависимости от направления, если дистанция тейка была меньше просадки.. по сути ставился стоп-лосс. ЗЫ.. Эта ситуация может произойти только при установке тейков через какое то время просле открытия,.. или переустановки, то есть старые удалили, а новые рассчетные или фиксированные поставили.Если установка происходит сразу после открытия позы, то все ставится корректно!! Важно понимать в чем была проблема. Нужно понять кто удаляет эти тейки. |
Администратор запретил публиковать записи гостям. |
BasketBull11_4 05 Июнь 2016 00:00 #1106
|
if(price>curr_ask)//buy
{
if(фиксированный_тейк!=0) TPP=NormalizeDouble(price+фиксированный_тейк*curr_point,digits);
else TPP=NormalizeDouble(price+RangeCalc(symbol)*curr_point*1.8,digits);
}
else
{
if(фиксированный_тейк!=0) TPP=NormalizeDouble(curr_ask+фиксированный_тейк*curr_point,digits);
else TPP=NormalizeDouble(curr_ask+RangeCalc(symbol)*curr_point*1.8,digits);
}
if(price<curr_bid)//sell
{
if(фиксированный_тейк!=0) TPP=NormalizeDouble(curr_bid-фиксированный_тейк*curr_point,digits);
else TPP=NormalizeDouble(curr_bid-RangeCalc(symbol)*curr_point*1.8,digits);
}
else
{
if(фиксированный_тейк!=0) TPP=NormalizeDouble(price-фиксированный_тейк*curr_point,digits);
else TPP=NormalizeDouble(price-RangeCalc(symbol)*curr_point*1.8,digits);
} |
Администратор запретил публиковать записи гостям. |