[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 341

 
Уважаемые НОВИЧКИ! Некоторые вопросы обсуждаемые здесь очень специфические и действительно заслуживают подсказки и помощи. Но некоторые ну просто, откровенно, возникают от того что начиная програмировать некоторые ЭКСПЕРТО писатели даже не читают учебник по МКЛ. ПРОСЬБА: Скачайте учебник (5 мб) прочтите его и вам не придется ждать ответ с форума-он будет у Вас в голове.
 
costy_ >>:

Сохраненные пар-ры "вбиваются" в индикаторы один раз при инициализации шаблона, потом "они становятся совершенно независимыми"/

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


Спасибо!

 

mazepa 08.12.2009 17:42

ОТВЕТ: на КОД!

Если я понял алгоритм, то в установленое время открываем бай (селл), если цена прошла >10 пунктов в другую сторону, то закрываем ордер и встаем в противоположную сторону.

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

//Функция закрытия всех рыночных ордеров в окне--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
  {
  for(int i=0; i<OrdersTotal(); i++) //перебираем все ордера по всем валютам
  {
  if (OrderSelect(i,SELECT_BY_POS)==true) //если ордер выбран успешно
  {
  if (OrderSymbol()!=Symbol()) continue; //если выбранный ордер не по той валюте то продолжаем перебор
  {
  switch(OrderType()) //в нужном ордере определяем тип (Bue_Sell) и закрываем
  {
  case 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
  case 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
  }
  }
  }
  }
  return;
  }  
Тоесть теперь прежде чем открыться в противоположном направлении пишешь просто _CloseAllOrder()

 


Друзья, я только учусь. Просьба не смотреть на содержимое программы, а просто помочь мне найти ошибку в программе:

int start()
{
   switch(CurrentState)
        {
            case STATE_SHORT:
                     MyOrderTicket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 1, 0, 0,NULL, 1, 0, Red);
                     OrderSelect(MyOrderTicket,SELECT_BY_TICKET);
                     if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid+90*Point,Bid-Profit1*Point,0,Green)==true)
                         {CurrentState=STATE_1;
                           break;
                         }
           case STATE_1:
                    OrderSelect(MyOrderTicket,SELECT_BY_TICKET);
                    if(Ask <= OrderTakeProfit())
                        {CurrentState=STATE_SHORT;
                          break;
                        }
                    if(Bid >= (OrderOpenPrice()+Profit1*Point)
                        {CurrentState=STATE_SHORT;
                          break;
                        }
  }
//----
return(0);
}


Ошибка следующая: '\end_of_program' - unbalanced left parenthesis. Где ошибка?









 
Klinskih >>:

Друзья, я только учусь. Просьба не смотреть на содержимое программы, а просто помочь мне найти ошибку в программе:

Есть:

                    if(Bid >= (OrderOpenPrice()+Profit1*Point)

надо:

                    if(Bid >= OrderOpenPrice()+Profit1*Point)



 

Как объявить одномерный массив не применяя запись по каждой ячейке памяти(возможно ли)

  ии[1]=ExtMapBuffer1[0]; ии[2]=ExtMapBuffer2[0];  ии[3]=ExtMapBuffer3[0]; 

а одномерной последовательностью

  ии[3]={ExtMapBuffer1[0],ExtMapBuffer2[0],ExtMapBuffer3[0]} 

или одномерная последовательность только для числовых и логических констант!!?

 
TheXpert >>:

Есть:

надо:



Спасибо, друг!

 
future >>:

Ещё один вопросик есть. Если if (OrdersTotal()==0) это... если количество открытых ордеров равно нулю... то как будет...если количество открытых ЗА ДЕНЬ ордеров равно нулю.

Нет чего-нибудь типа OrdersDayTotal?

нету, но всегда можно написать свою функцию)

int OrdersDayTotal(string Symb)
 {
int cnt,
OrdersDayTotal=0,
Time0=iTime(NULL,PERIOD_D1,0);

for(cnt=0;cnt<OrdersTotal();cnt++)
   {
   OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
   if(OrderSymbol()==Symb && OrderType()<2)
      {
      if(OrderOpenTime()>Time0) OrdersDayTotal++;
      }
   }
for(cnt=0;cnt<OrdersHistoryTotal();cnt++)
   {
   OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY);
   if(OrderSymbol()==Symb && OrderType()<2)
      {
      if(OrderOpenTime()>Time0) OrdersDayTotal++;
      }
   }
return(OrdersDayTotal);
 }

считаются ордера Buy и Sell, по заданному инструменту, открытых за сегодня. Без отложенных.

if(OrdersDayTotal(Symbol())==0) {...}

как-то так)

 
Stepan241 >>:

mazepa 08.12.2009 17:42

ОТВЕТ: на КОД!

Если я понял алгоритм, то в установленое время открываем бай (селл), если цена прошла >10 пунктов в другую сторону, то закрываем ордер и встаем в противоположную сторону.

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

//Функция закрытия всех рыночных ордеров в окне--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
  {
  for(int i=0; i<OrdersTotal(); i++) //перебираем все ордера по всем валютам
  {
  if (OrderSelect(i,SELECT_BY_POS)==true) //если ордер выбран успешно
  {
  if (OrderSymbol()!=Symbol()) continue; //если выбранный ордер не по той валюте то продолжаем перебор
  {
  switch(OrderType()) //в нужном ордере определяем тип (Bue_Sell) и закрываем
  {
  case 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
  case 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
  }
  }
  }
  }
  return;
  }  
Тоесть теперь прежде чем открыться в противоположном направлении пишешь просто _CloseAllOrder()


функция бомба она у меня занимала пару страниц.Огромное спасибо
 
Stepan241 >>:

mazepa 08.12.2009 17:42

ОТВЕТ: на КОД!

Если я понял алгоритм, то в установленое время открываем бай (селл), если цена прошла >10 пунктов в другую сторону, то закрываем ордер и встаем в противоположную сторону.

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

//Функция закрытия всех рыночных ордеров в окне--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
  {
  for(int i=0; i<OrdersTotal(); i++) //перебираем все ордера по всем валютам
  {
  if (OrderSelect(i,SELECT_BY_POS)==true) //если ордер выбран успешно
  {
  if (OrderSymbol()!=Symbol()) continue; //если выбранный ордер не по той валюте то продолжаем перебор
  {
  switch(OrderType()) //в нужном ордере определяем тип (Bue_Sell) и закрываем
  {
  case 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
  case 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
  }
  }
  }
  }
  return;
  }  
Тоесть теперь прежде чем открыться в противоположном направлении пишешь просто _CloseAllOrder()


функция бомба она у меня занимала пару страниц.Огромное спасибо
Причина обращения: