[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 369

 
Color MA Орлова.
 
Спасибо
 

мне сложно пока разобраться с торговыми функциями, но программирование немного знаю

мне было бы хорошо реализовать алгоритм такого рода с вашей помощью:

если (условие покупки)

если есть откртый ордер

если этот ордер по паре в которой сработало условие на покупку

если он на продажу

закрываем его

открываем на покупку.

Помогите написать а, я уже устал. прочитал много, что то я понять пока не могу.

 
frxmax:

мне сложно пока разобраться с торговыми функциями, но программирование немного знаю

мне было бы хорошо реализовать алгоритм такого рода с вашей помощью:

1. если (условие покупки)

2. если есть откртый ордер

2.1. если этот ордер по паре в которой сработало условие на покупку

2.2. если он на продажу

3. закрываем его

4. открываем на покупку.

Помогите написать а, я уже устал. прочитал много, что то я понять пока не могу.


1. Условие покупки каково?

2. Делаем цикл по рыночным ордерам терминала

2.1. В цикле (п.2) проверяем на какой паре открыт выбранный ордер и, если по нужной, то ...

2.2. Проверяем тип выбранного ордера и если он Селл ...

3. Закрываем выбранный ордер

4. Открываем ордер Бай

Или нужен сразу код полностью? Тогда это уже не помощь, а медвежья услуга... Хотя... Если не получится - напишу, ноу проблем...

 

да я писал и помогать помогали. и "у каждого своя правда" в этом вопросе.

вот вариант мой

if (LoCurent>LoPrevious && FtCurent>FtPrevious)
      {
       ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point,"Buy",1111,0,Green);
       if(ticket>0)
          {
           if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
          }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
      }
// условие ПРОДАЖИ 
   if(LoCurent<LoPrevious && FtCurent<FtPrevious)
       {
        ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask+StopLoss*Point,Ask-TakeProfit*Point,"Sell",2222,0,Red);
        if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
        else Print("Error opening SELL order : ",GetLastError()); 
        return(0); 
        }    
    return(0);
 // ЗАКРЫТИЕ СДЕЛОК
 for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
           if(LoCurent<LoPrevious || FtCurent<FtPrevious || LoCurent<-30 || LoPrevious<-30)
               {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
               }
           }else
               {
                 if(LoCurent>LoPrevious || FtCurent>FtPrevious || LoCurent>30 || LoPrevious>30)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                     return(0); // exit
                  }
                }
     }
        
     
 }
 

}

ВОт еще вариант KONDOR'а

if(LoCurent<LoPrevious)
     if(CalculateOrders(Symbol(),OP_SELL)>0) Ord_Close(Symbol(),OP_SELL);
     if(total<1)
     Ticket(OP_BUY);          }

//-----------------------
int CalculateOrders(string simbol,int type)
  {
   int count=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==simbol)
        {
         if(OrderType()==type)  count++;
        
        }
     }
     
 return(count);
  }

//---------------------

void Ord_Close(string simb,int type) {  double price;
   
   if(type==OP_BUY)  price=MarketInfo(simb, MODE_BID); else
   if(type==OP_SELL) price=MarketInfo(simb, MODE_ASK);

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if( OrderSymbol()!=simb || OrderMagicNumber()!=111) continue;
      //---- check order type 
      if(OrderType()==type)
        {  OrderClose(OrderTicket(),OrderLots(),price,3,White);   break;  }
        
        
     }   
     
     
 } 
//-----------------------------

int Ticket(int op){
      double pp = MarketInfo(Symbol(), MODE_POINT);
      double pBid = MarketInfo(Symbol(), MODE_BID);
      double pAsk = MarketInfo(Symbol(), MODE_ASK); 
      double open_price;
      double T;
      color col=NULL;
      int mn=0;
      
  if(op==0) {open_price=pAsk; col=Blue; T=pAsk+TakeProfit*pp;}
  if(op==1) {open_price=pBid; col=Red;  T=pBid-TakeProfit*pp;}
  int res=OrderSend(Symbol(),op,Lot,open_price,1,Bid-StopLoss*Point,Bid+TakeProfit*Point,NULL,mn,0,col); 

   return(res);               
 }
 

Советник все равно открывает сделки на каждом изменении цены при удовлетворении условия на открытие оредра.

Еще проблема с закрытием ордеров по обратному сигналу (прикрытие ордера покупки при поступлении сигнала на продажу и наоборот).

 
frxmax:

Советник все равно открывает сделки на каждом изменении цены при удовлетворении условия на открытие оредра.

Еще проблема с закрытием ордеров по обратному сигналу (прикрытие ордера покупки при поступлении сигнала на продажу и наоборот).

Можно сделать по другому. Написать ТЗ (как просит Сергеев и Компостер). А потом получить работающий код. На самом деле решение всех проблем есть. И не однократно выкладывалось на форуме.
 

Все привет. Слышал о форексе, но не вдавался в подробности, знаю азы программирования на Си.

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

Сложно ли? реально ли заработать на этом? Какой минимальный старт. И что нужно изучить для этого?

 
Vinin:

Можно сделать по другому. Написать ТЗ (как просит Сергеев и Компостер). А потом получить работающий код. На самом деле решение всех проблем есть. И не однократно выкладывалось на форуме.
Техническое задание на выполнение работ я правильно понимаю?
 
frxmax:

1. Советник все равно открывает сделки на каждом изменении цены при удовлетворении условия на открытие оредра.

2. Еще проблема с закрытием ордеров по обратному сигналу (прикрытие ордера покупки при поступлении сигнала на продажу и наоборот).

Условие:

1. Если есть условие на открытие ордера (Buy); Если нету открытого ордера (Buy), то открыть ордер Buy. Аналогично для Sell

2. Если есть условие на открытие ордера Buy, если есть открытый ордер Sell - закрыть Sell.

Таким образом получаем:

1. Если есть сигнал на открытие ордера Buy ->>

2. Если есть открытый ордер Sell ->
2.1 Закрываем его.

3. Если нету открытого ордера Buy ->
3.1 Открываем его.

Аналогично для Sell

Причина обращения: