[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 447

 
T-G >>:

а почему как функция не работает а в старте работает?

фактически это и есть функция только все зависит что стоит если if(Close_){ - то применяйте внутри старта, если void Close_() { как функцию работающяая за пределами старта.


void Close_() {
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
}
Sleep(1000);
}
}
}
 
sergeev >>:


алгоритм у вас верный. сделайте распринтовку возможных ошибок и вообще ухзнать куда доходит эксперт при выполнении этого кода.

+ выведите расчитанные значения рси.

)))) по моему ошибка есть у парня в коде.....Хотя я новичек могу и ошибаться.

 
ошибки вроде нет, есть косячок небольшой только, да и Sleep тут нафик не нужна :)
 
gince >>:

//во внешние перменные
extern bool Close_ =true; //использовать закрытие по РСИ вкл выкл. 
// в старт закиньте
if (Close_){
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if ((OrderType() == OP_BUY)&&(rsi_1 > Level_2 && rsi_0 < Level_2)) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
if ((OrderType() == OP_SELL)&&(rsi_1 < Level_1 && rsi_0 > Level_1)) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
}
Sleep(1000);
}
}
}
 

Это стандартный МАсимпле. Просто я пробую выяснить почему неправилно закрывает. Пробую логику для закрытия сделок. Одна часть состоит из РСИ- вот она и неработает


//if(Open[1]>ma_2 && Close[1]<ma_2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         if(rsi_1 > Level_2 && rsi_0 < Level_2) {OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         Print(rsi_0,"     ",rsi_1);}
         break;
        }
      if(OrderType()==OP_SELL)
        {
         //if(Open[1]<ma_2 && Close[1]>ma_2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         if(rsi_1 < Level_1 && rsi_0 > Level_1){OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
          Print(rsi_0,"     ",rsi_1);}
         break;

изменил после печатки шифт

rsi_0=iRSI( NULL,0,4, PRICE_CLOSE, 1 ); 
rsi_1=iRSI( NULL,0, 4, PRICE_CLOSE, 2 ) ;
 
Уважаемые гуру!
Пожалуйста, не оставьте без внимания.

Купил ноутбук HP с предустановленной ОС Windows Vista с ОС 64 бит.
Начались проблемы с работой советника. Поначалу сделки кое-как открывались. Но уже через неделю перестали открываются сделки советника совсем. Крутили-вертели, в итоге решили, что проблема в 64 битах. Переустановили, поставили 32 бита и 7 Windows. Поработал нормально один день и опять не работает. Может получил какие-то обновления винды, которые влияют?

На других компах (у коллег) советник работает вообще без перебоев. Моего старого ноута уже нет, а что-то покупать, сейчас нет возможности.

Я, кстати, работаю на платформе Инстатрейдер.

Пожалуйста, если кто-то сталкивался или есть предположения, как это можно исправить, подскажите.

 

Помогите переделать простой советник, бьюсь неделю!!!! Или написать снова, а то все советники слишком сложные и я их не могу под себя подстроить!!

Суть такая:  Хочу добавить в этот советник( торгующий на пересечении) ещё индикатор MACD, который подает свой сигнал на продажу и покупку и советник должен параллельно выполнять их. Открытых ордеров BUY не больше трех и SELL тоже трех. Все ордера должны закрываться только по stoploss и takeprofit, а не принудительно советником.

//--------------------------------------------------------------------
extern int     period_EMA           = 28,
               period_WMA           = 8 ,
               stoploss             = 50,
               takeprofit           = 50,
               risk                 = 10;
double  LOT;
//--------------------------------------------------------------------
double SL,TP;
int TimeBar; //глобальная переменная
//--------------------------------------------------------------------
int start()
{
   if (TimeBar==Time[0]) return(0);
   if (TimeBar==0) {TimeBar=Time[0];return(0);}//первый запуск программы
   double EMA0 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,0);
   double WMA0 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,0);
   double EMA1 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,1);
   double WMA1 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,1);
   if (EMA0<WMA0&&EMA1>WMA1) //Buy
   {
      TimeBar=Time[0];                            
      TP  = Ask + takeprofit*Point;
      SL  = Ask - stoploss*Point;     
      LOT = LOT(risk,1);
      CLOSEORDER("Sell");
      OPENORDER ("Buy");
   }
   if (EMA0>WMA0&&EMA1<WMA1) //Sell
   {
      TimeBar=Time[0];                            
      TP = Bid - takeprofit*Point;
      SL = Bid + stoploss*Point;            
      LOT = LOT(risk,1);
      CLOSEORDER("Buy");
      OPENORDER ("Sell");
   }
return(0);
}
//--------------------------------------------------------------------
void CLOSEORDER(string ord)
{
   for (int i=OrdersTotal()-1; i>=0; i--)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY && ord=="Buy")
            OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);// Close Buy
         if (OrderType()==OP_SELL && ord=="Sell")
            OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);// Close Sell
      }   
   }
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error;
   if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,2,SL,TP,"", 1,3);
   if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,2,SL,TP,"",-1,3);
   if (error==-1) //неудачная покупка OK
   {  
      ShowERROR(error,0,0);
   }
return;
}                  
//--------------------------------------------------------------------
void ShowERROR(int Ticket,double SL,double TP)
{
   int err=GetLastError();
   switch ( err )
   {                  
      case 1:                                                                               return;
      case 2:   Alert("Нет связи с торговым сервером   "              ,Ticket," ",Symbol());return;
      case 3:   Alert("Error  неправильные параметры   Ticket ",       Ticket," ",Symbol());return;
      case 130: Alert("Error близкие стопы   Ticket ",                 Ticket," ",Symbol());return;
      case 134: Alert("Недостаточно денег   ",                         Ticket," ",Symbol());return;
      case 146: Alert("Error Подсистема торговли занята ",             Ticket," ",Symbol());return;
      case 129: Alert("Error Неправильная цена ",                      Ticket," ",Symbol());return;
      case 131: Alert("Error Неправильный объем ",                     Ticket," ",Symbol());return;
      case 4051:Alert("Error Недопустимое значение параметра функции ",Ticket," ",Symbol());return;
      case 4105:Alert("Error Ни один ордер не выбран ",                Ticket," ",Symbol());return;
      case 4063:Alert("Error Ожидается параметр типа integer ",        Ticket," ",Symbol());return;
      case 4200:Alert("Error Объект уже существует ",                  Ticket," ",Symbol());return;
      default:  Alert("Error  " ,err,"   Ticket ",                     Ticket," ",Symbol());return;
   }
}
//--------------------------------------------------------------------
double LOT(int risk,int ord)
{
   double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/ord;
   if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
   if (LOT<MINLOT) LOT = MINLOT;
   if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
   return(LOT);
}
//--------------------------------------------------------------------

 
Serg-s-n >>:

Помогите переделать простой советник, бьюсь неделю!!!! Или написать снова, а то все советники слишком сложные и я их не могу под себя подстроить!!

Суть такая: Хочу добавить в этот советник( торгующий на пересечении) ещё индикатор MACD, который подает свой сигнал на продажу и покупку и советник должен параллельно выполнять их. Открытых ордеров BUY не больше трех и SELL тоже трех. Все ордера должны закрываться только по stoploss и takeprofit, а не принудительно советником.

   double MacdMain0 = iMACD(NULL,0,period_fast,period_slow,period_signal,0,MODE_MAIN, PRICE_OPEN,0);
   double MacdSignal0 = iMACD(NULL,0,period_fast,period_slow,period_signal,0,MODE_SIGNAL, PRICE_OPEN,0);
   double MacdMain1 = iMACD(NULL,0,period_fast,period_slow,period_signal,0,MODE_MAIN, PRICE_OPEN,1);
   double MacdSignal1 = iMACD(NULL,0,period_fast,period_slow,period_signal,0,MODE_SIGNAL, PRICE_OPEN,1);
   if (EMA0<WMA0&&EMA1>WMA1 && MacdMain0 >MacdSignal0 && MacdMain1 <MacdSignal1)

ну это добавит макд аналогично мувингам
 
С этим все понятно, а как выставить ордера? В оригинале выставляется допустим Buy, при сигнале Sell - Buy закрывается и выставляется Sell!  А мне не нужно закрытия, Советник должен выставлять ордера с стопами и ВСЕ!
 

У меня вопрос, или точнее просьба, по этому же советнику EMA_WMA.mq4 и также в отношении закрытия. Можно ли вместо закрытия по Take Profit или в дополнение к этому добавить возможность закрытия ордера по максимальному/минимальному значению МА. Мне представляется, что это был бы оптимальный вариант выхода с рынка, (хотя может, конечно, я и не прав). Пожалуйста, кому это не сложно, добавьте такую функцию к этому советнику.

Еще небольшой вопрос. Выскакивает сообщение: "Error. Близкие стопы", хотя стоп-лосс в настройках 50 пунктов (MasterForex). Что это значит?