Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes ID, что это? Узнай из статьи!
Alex
13
Alex 2012.03.29 13:32 

для metatreder 4 

использую советника который сигнализирует на отклонение от цены открытия в любую сторону на 10 пунктов

и если сработал стоплосс. неработает как задумал если поставить на несколько графиков. пока не разобрался как сделать.

 


  

int start()
   {
    int total;
    double a,b;
 a=MarketInfo(Symbol(),MODE_ASK);
 b=MarketInfo(Symbol(),MODE_BID);
 total=OrdersTotal();

 if (total<1) {PlaySound("stops.wav"); return(0) ;}

 OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

 if(a-OrderOpenPrice()>0.0010 || b-OrderOpenPrice()<-0.0010) PlaySound("alert.wav");
  
 return(0);
 }

 

 

а так же использую скрипт для закрытия предыдущего ордера и сразуже открытия нового

 



  

int start()

 {
  
 bool result;
 double price;
 int cmd,error1;

 if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
 {
 cmd=OrderType();
    
 if(cmd==OP_BUY || cmd==OP_SELL)
 {
 while(true)
 {
 if(cmd==OP_BUY) price=Bid;
 else price=Ask;
 result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
 if(result!=TRUE) { error1=GetLastError(); Print("LastError = ",error1); }
 else error1=0;
 if(error1==135) RefreshRates();
 else break;
 }
 }
 }
 else Print( "Error when order select ", GetLastError());

   int ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Ask+100*Point,0,"SELL 1",255,0,CLR_NONE);
 if(ticket<1)
 {
 int error=GetLastError();
 Print("Error = ",ErrorDescription(error));
 return;
 }
 PlaySound("alert.wav");
 OrderPrint();
 return(0);
 } 
  

исправте мне мои кривые руки))))

надо чтоб сигнал срабатывал адекватно на каждом из графиков eurusd eurjpy eurcad gbpjpy

было бы круто еслиб график на котором срабатывал сигнал как то визуально отмечался.

спасибо всем кто поможет  подучиться .  

Илья
2546
Илья 2012.03.29 17:56  
Нужно бы отредактировать пост для начала)))) Есть специальная вставка "код"
Sergey Guliaev
2303
Sergey Guliaev 2012.03.29 18:55  
TarasBY
1745
TarasBY 2012.03.29 22:30  
au77:

для metatreder 4

использую советника который сигнализирует на отклонение от цены открытия в любую сторону на 10 пунктов

и если сработал стоплосс. неработает как задумал если поставить на несколько графиков. пока не разобрался как сделать.

а так же использую скрипт для закрытия предыдущего ордера и сразуже открытия нового

исправте мне мои кривые руки))))

надо чтоб сигнал срабатывал адекватно на каждом из графиков eurusd eurjpy eurcad gbpjpy

было бы круто еслиб график на котором срабатывал сигнал как то визуально отмечался.

спасибо всем кто поможет подучиться .

Советник лучше сделать индикатором.

#property indicator_chart_window
extern int Distance = 10;        // в пп. для 4-рёх знаков
double gd_Distance;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
    int li_Decimal = 1;
//---- indicators
    if (Digits % 2 == 1) li_Decimal = 10;
    gd_Distance = Distance * li_Decimal * Point;
//----
    return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
    int total = OrdersTotal(), li_ord = 0;
    if (total == 0) return (0);
    double lda_Price[2];
    lda_Price[0] = Bid;
    lda_Price[1] = Ask;
    for (int li_ORD = total - 1; li_ORD >= 0; li_ORD--)
    {
        if (!OrderSelect (li_ORD, SELECT_BY_POS, MODE_TRADES)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (OrderType() > 1) continue;
        li_ord++;
        if (MathAbs (lda_Price[OrderType()] - OrderOpenPrice()) > gd_Distance)
        {
            Alert ("На ", Symbol(), " цена вышла из коридора !!!");
            PlaySound ("alert.wav");
            break;
        }
    }
    if (li_ord == 0)
    {
        Alert ("На ", Symbol(), " отсутствуют ордера !!!");
        PlaySound ("stops.wav");
        return (0) ;
    }
    return (0);
}
 //+------------------------------------------------------------------+
Alex
13
Alex 2012.03.29 22:39  
спасибо сейчас попробую разобраться как работает
Alex
13
Alex 2012.03.29 23:18  

благодарю!

еще такой вопрос.

бывает, при исполнении моего скрипта после закрытия позиции новая не открываеться. говорит что цена устарела. это почему происходит? 

TarasBY
1745
TarasBY 2012.03.30 07:26  
au77:

благодарю!

еще такой вопрос.

бывает, при исполнении моего скрипта после закрытия позиции новая не открываеться. говорит что цена устарела. это почему происходит?

Ваш код будет работать до момента использования на нескольких инструментах. Иначе нужно проводить фильтрацию ордеров по Символу:

#include     <stdlib.mqh>                          // Библиотека с кодами ошибок
int start()
{
    bool   result, lb_InvalidSTOP;
    double price;
    int    cmd, error1;
    for (int li_ORD = OrdersTotal() - 1; li_ORD >= 0; li_ORD--)
    {
        if (!OrderSelect (li_ORD, SELECT_BY_POS, MODE_TRADES)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (OrderType() > 1) continue;
        while (IsTradeAllowed() == true)
        {
            if (!IsExpertEnabled() || IsStopped()) return (0);
            if (OrderType() == OP_BUY) price = Bid; else price = Ask;
            result = OrderClose (OrderTicket(), OrderLots(), price, 3, CLR_NONE);
            if (!result)
            {
                if (fErrorHandling (GetLastError(), lb_InvalidSTOP)) {return (0);}
                RefreshRates();
            }
            else break;
        }
    }
    RefreshRates();
    int ticket = OrderSend (Symbol(), OP_SELL, 0.01, Bid, 3, Ask+100*Point, 0, "SELL 1", 255, 0, CLR_NONE);
    if (ticket < 1)
    {Print ("Error = ", ErrorDescription (GetLastError())); return;}
    else
    {
       OrderSelect (ticket, SELECT_BY_TICKET);
        OrderPrint();
    }
    PlaySound ("alert.wav");
    return (0);
}
 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY                                                                  |
//+-----------------------------------------------------------------------------------+
//|        Функция обрабатывает ошибки                                                |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fErrorHandling (int fi_Error, bool& fb_InvalidSTOP)
{   
//----
    if (fi_Error == 0) return (true);
    switch (fi_Error)
    {
        case 4:   /*ERR_SERVER_BUSY*/
        case 137: /*ERR_BROKER_BUSY*/
        case 139: /*ERR_ORDER_LOCKED*/
        case 146: /*ERR_TRADE_CONTEXT_BUSY*/
            Sleep (500); return (false);
        case 6:   /*ERR_NO_CONNECTION*/ 
            fReConnect(); Sleep (1000); return (false);
        case 135: /*ERR_PRICE_CHANGED*/ 
        case 136: /*ERR_OFF_QUOTES*/
        case 138: /*ERR_REQUOTE*/
            Sleep (1); return (false);
        case 129: /*ERR_INVALID_PRICE*/
            fb_InvalidSTOP = true; Print ("Не правильные цены - err № ", fi_Error); return (false);
        case 130: /*ERR_INVALID_STOPS*/
            fb_InvalidSTOP = true; Print ("Не правильные стопы - err № ", fi_Error); return (false);
        case 4109: /*ERR_TRADE_NOT_ALLOWED*/
            Print ("TRADE NOT ALLOWED ! SWITCH ON option \' Allow live trading\' (Необходимо включить опцию \'Разрешить советнику торговать\')");
            return (true);
        default: Print (OrderTicket(), ": Критическая ошибка № ", ErrorDescription (fi_Error)); return (true);
    }
//----
    return (true);
}
Anton Shpilyuk
378
Anton Shpilyuk 2012.03.30 10:16  
если при отклонении нужно принять решение какое то именно вручную то было бы неплохо вставить messagebox с предложением того или иного действия...этот так....в дополнение=)
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий