ИЗ ДВУХ ОДИН

 

привет всем програмистам !!! откликнетесь кто нибудь просьба добавить функции а именно при общей прибыли напимер на пяти пар валют закрыть все ордера спасибо.

//---- input parameters
extern int       ExtParam1;
extern int       TakeProfit_Buy = 100;
extern int       TakeProfit_Sell = 100;
extern int       StopLoss_Buy = 100;
extern int       StopLoss_Sell = 100;
extern int       TrailingStop = 0;
extern double    Lots = 0.01;
extern int       per_MA1 = 4;
extern int       per_MA2 = 6;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  
  
{
if (Volume[0] > 1) return(0);
//----
// Объявляем переменные
int total, cnt, Buy=0, Sell=0;
double MA1,  MA2, MA1_prew;
int err;

// Вычисляем начальные параметры индикаторов для поиска условий входа

  MA1 = iMA(NULL,PERIOD_M15,per_MA1,0,MODE_SMMA,PRICE_CLOSE,0);
  
  MA1_prew = iMA(NULL,PERIOD_M15,per_MA1,0,MODE_SMMA,PRICE_CLOSE,1);
  
  MA2 = iMA(NULL,PERIOD_M15,per_MA2,0,MODE_SMMA,PRICE_CLOSE,0);
  // проверим, есть ли ранее открытые позиции или ордеры?
    total=OrdersTotal();

  // Проверка средств
  if(AccountFreeMargin()<(1000*Lots))
     {
       Print("We have no money. Free Margin = ", AccountFreeMargin());   
       return(0);  
     }
//if(total<1)
// { 
  // Проверка условий для совершения сделки
  if(Buy<1  && (MA1-MA2)>=0.0001 && MA1_prew<=MA2)  
     {
            Print("BUY MA1 = ",MA1 ," MA2 = ", MA2 ," MA1_prew = ",MA1_prew);
            OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss_Buy*Point,Ask+TakeProfit_Buy *Point,"Покупаем",16384,0,Green);
            Sleep(10000);//10 секунд
            RefreshRates();
            OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss_Buy*Point,Ask+TakeProfit_Buy *Point,"Покупаем",16384,0,Green);

            //return(0);
     }

  if(Sell<1 &&  (MA2-MA1)>=0.0001 && MA1_prew>=MA2) 
     {
            Print("SELL MA1 = ",MA1 ," MA2 = ", MA2," MA1_prew = ",MA1_prew);
            OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss_Sell *Point,Bid-TakeProfit_Sell *Point,"Продаем",16385,0,Red);
             Sleep(10000);//10 секунд
            RefreshRates();
            OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss_Sell *Point,Bid-TakeProfit_Sell *Point,"Продаем",16385,0,Red);
            //return(0);
     }
// }     
  for(cnt=total-1;cnt>=0;cnt--)
     {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if(OrderType()==OP_BUY)
         { 
           if(MA1<=MA2)
             {
               //OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
             //Buy=0;
              // return(0); // exit
             }
           if(TrailingStop>10)  
             {                 
               if(Bid-OrderOpenPrice()>Point*TrailingStop) // Bid - цена покупки
                 {
                   if(OrderStopLoss()<Bid-Point*TrailingStop)
                     {
                       OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                       //return(0);
                     }
                 }
             }
         }
       if(OrderType()==OP_SELL)
         {
           if(MA1>=MA2)
             {
                //OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                //Sell=0;
              // return(0); // exit
             }
           if(TrailingStop>0)  
             {                 
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))  // Ask - цена продажи
                 {
                   if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                     {
                       OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                       //return(0);
                     }
                 }
             }
         }
     }
     
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
rusa писал (а) >>

привет ...!!! откликнетесь ...функции а ... ...напимер на пяти пар валют закрыть все ордера ....

Мало того, что вы (уверен, - чисто по женской рассеянности!) забыли расставить запятые в своём сообщ.- Но вы и не указали, о каких это пяти парах идёт речь? Или у вас один магик на все пары ? Ну ладно....(как здесь написал один товарисч - "история нас рассудит...")

Вам, возможно, поможет функция Функция GetProfitOpenPosInCurrency().

(Эта функция возвращает суммарный профит открытых на данный момент позиций. Профит возвращается в единицах валюты депозита)

Либо

Функция GetProfitOpenPosInPoint().

Эта функция возвращает суммарный профит открытых на данный момент позиций. Профит возвращается в пунктах.

Вы легко найдете эти функции в адресе 'Полезные функции от KimIV'

И возблагодарив автора функций, так же легко сможете их задействовать.