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

 
Zhunko:
Может код выложите? Можно псевдокод. Как это без старта?... Это же основная функция, как main() в С++.

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

функция старт(), это одна из трех, предопределенных в шаблоне нашего кода. Она должна просто присутствовать, как минимум!, потому что родительская программа - терминальная (вот она и есть main(), главная), выполняя свои основные задачи, получив свежую котировку от сервера (грубо) просто заглянет в вашу функцию старт и выполнит тот код, который в ней есть, если там будет просто return(), то функция старт на этом и закончится.

 
"Профи, не проходите мимо", :) поделитесь, пожалуйста, ссылкой на ваш любимый (желательно русскоязычный) новостной ресурс, где публикуется экономический календарь и прочие полезные штучки. Если здесь подобные ссылки размещать нельзя, тогда отправте их мне в ЛС.
 
помогите написать следующее.

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

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

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

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


начните сами писать - поможем

вот вам для начала в помощь https://book.mql4.com/ru/

 
abolk:


начните сами писать - поможем

вот вам в помощь https://book.mql4.com/ru/

я уже "начинал"

total=OrdersTotal();
if(УСЛОВИЕ откртие ордера на покупку)
if(total<1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+100*Point,"Buy",1111,0,Green);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}else
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_SELL)
OrderClose(NULL,Lot,Ask,3);
return(0);
}
}

 
Почти правильно, только сначала проверь, а потом выставляй.
 
frxmax:
помогите написать следующее.

если есть сигнал на покупку
прверяем открытые ордера на продажу
если есть закрываем
если нет открываем покупку
//  в ф-ции старт 
  
if(....условие покупки....){
     if(CalculateOrders(Symbol(),OP_SELL)>0) Ord_Close(Symbol(),OP_SELL);
     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()!=mn) 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+Take*pp;}
  if(op==1) {open_price=pBid; col=Red;  T=pBid-Take*pp;}
  int res=OrderSend(Symbol(),op,0.1,open_price,0,0,T,NULL,mn,0,col); 

   return(res);               }
 
KONDOR:

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

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

Вы мне очень помогли.

 
frxmax:

Попробовал перевернуть все на продажу - не получилось. сделки не открывает

ошибка 130. - стопы не правильно, так а где они у нас там?

теперь он открывает на каждый бар ордер, а нужно только чтобы один.


total=OrdersTotal();

if(total<1)

и т.д.

 
KONDOR:


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

со стопами тоже разобрался

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