как правильно написать код входа при открытий нового бара?

 

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

заранее спасибо.  

 

А вот так:

//в глобальных
static int prevtime = 0;


int start()
  {

//  задаем работу по ЦЕНАМ ОТКРЫТИЯ 
if (Time[0] == prevtime) return(0); //если появился новый бар
  prevtime = Time[0]; // начинаем работу
 
static int prevtime=0;
int start()
  {
  if (Time[0]==prevtime)return(0); 
  prevtime = Time[0];
  if (!IsTradeAllowed())
    {
    prevtime=Time[1];
    MathSrand(TimeCurrent());
    Sleep(30000+MathRand());
    }
Начало такое.
 

а как будет выглядеть, закрытие по close[0]?

static int prevtime = 0; его лучше куда вписать в init? или как переменные данные в самом начале? 

если я правильно понял условие if (Time[0] == prevtime) return(0); //если появился новый бар
  prevtime = Time[0]; // начинаем работу пишем 

загоняем воттак в код

if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==false)
if (Time[0] == prevtime) return(0); //если появился новый бар
prevtime = Time[0]; // начинаем работу
OrderSend(Symbol(),OP_SELL,Lots,Bid,2,0,0);
 спасибо

 
if( iVolume(Symbol(),TF,0)<2) - наилучший и кратчайший вариант для входа
 

Просто в самом начале ф-и старт вставьте :

if (Time[0] == prevtime) return(0); //если появился новый бар
prevtime = Time[0]; // начинаем работу

-------------------------------------

И больше ничего.

Весь код будет работать по ценам открытия.

(Разве-что трал лучше задать выше этих строк. Чтобы он по всем тикам работал.)

И закрытие по close[0] (то бишь close[1]) - тоже при этом будет выполняться - так как вы хотите.

----------------------------------------------

Кстати - сами логически подумайте. Выражение close[0] - по сути ЭТО ТЕКУЩАЯ ЦЕНА. И закрытие тут будет бессмысленным. Т.е. не успеет позиция открыться в таком режиме, - она тут же и закроется.

 
зачем все делают глобальные переменные статичными ?)) В чем же прикол?)
 
if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==false)
  if (Time[0] == prevtime) return(0); //если появился новый бар
  prevtime = Time[0]; // начинаем работу
  OrderSend(Symbol(),OP_SELL,Lots,Bid,2,0,0);
  
  if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true)
  if (OrderType()==OP_SELL)
  if( Close[1]==prevtime
  ||OrderOpenPrice()-Bid>=k*Point)
  OrderClose(OrderTicket(),OrderLots(),Ask,2,CLR_NONE);
возможно ли вот так написать или я ошибоку допустил?
 
при таком написаний кода сделка открывается при каждой новой тике, т.е. в одном баре он совершает несколько сделок, хотя этого не надо  делать, нужно новые функции для этого?
 

========================

int start() 
  {
  if (Time[0] == prevtime) return(0); //если появился новый бар
  prevtime = Time[0]; // начинаем работу


  if (OrdersTotal()<1)               {//если нет откр. позиций
  OrderSend(Symbol(),OP_SELL,Lots,Bid,2,0,0);
                     }
                   
  for (int i=0; i<OrdersTotal(); i++) {
  if   (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
  if (OrderType()==OP_SELL)                       {
  if( OrderOpenPrice()-Bid>=k*Point)               {
  OrderClose(OrderTicket(),OrderLots(),Ask,2,CLR_NONE);
          }
         }
        }
      }
      

}//int start() 
 
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
  if (OrderType()==OP_SELL)                       {
  if( OrderOpenPrice()-Bid>=k*Point)               {
  OrderClose(OrderTicket(),OrderLots(),Ask,2,CLR_NONE);
          }
         }
        }

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

if( OrderOpenPrice()-Bid>=k*Point) 

можно ли написать вместо этого просто close[1]?