[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 197

 
CLAIN:

Товарищи, помогите плз... написал простенький код, но при компиляции говорит, что скобки не уравновешены, а я их уже по 300 раз пересчитал - все на месте

Идея проще некуда - если MACD побыл выше(или ниже) 0 не более 7 минут, то позиция открывается


Проверь эту функцию

void AnalyzeSignal(int signal) 
{ 
  if(signal == 100) 
  { 
    ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на покупку по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
  if(signal == -100) 
  { 
    ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на продажу по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
} 

//---- 
return(0); 
} 
 
CLAIN:
p.s. как рисовать скрипт так красиво, как у вас?

Когда пишешь ответ есть кнопочка SRC.

А что касаеся скобочек, то у меня есть привычка указывать к чему относится закрывающая

}//for

}//if (signal...

 
splxgf:

А что касаеся скобочек, то у меня есть привычка указывать к чему относится закрывающая

}//for

}//if (signal...


"на вкус и цвет..." - но, надо признать, такой подход загромождает код ненужной информацией + отвлекает время на написание лишних строчек кода + не решает проблему при глубокой вложенности (нумеровать уровни?)

лучше структурировать код - как в примере постом выше

 

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

if (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0,"BUY: ",MagicL,0,Green);

}

где

// считаю количество открытых ордеров для бумаги
int CountOrder=0;
for (int j=0; j<OrdersTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol()) CountOrder++;

// номер бара последней закрытой позиции либо -1, еси не была еще открыта
int BarLast=BarLastClosePose();


и

// номер бара последней закрытой позиции
int BarLastClosePose()
{
datetime t;
int i;

for (i=0; i<OrdersHistoryTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
//if (OrderMagicNumber()!=Magic) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderCloseTime()) t=OrderCloseTime();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

 
спасибо Roger
 
datetime LastTradeBar;

bool CanTrade = True;

int Start()

{ 

if (LastTradeBar==Time[0] ) CanTrade=False; else CanTrade=True; 

if (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
if (CanTrade)

{

OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0,"BUY: ",MagicL,0,Green);

LastTradeBar=Time[0];

} 

}
А вообще логическая переменная здесь лишняя.
 
Vinin:


Проверь эту функцию


Винин, приверил, в этой функции все хорошо... return(0) относится к функции старт, и если не считать скобку, которая к return'y прилагается, то скобок получается 14... по 7 в каждую сторону
 
CLAIN:

Винин, приверил, в этой функции все хорошо... return(0) относится к функции старт, и если не считать скобку, которая к return'y прилагается, то скобок получается 14... по 7 в каждую сторону

Помогает копипаст каждой функции в отдельный файл и проверочная компиляция.

Если скобочки правильные, то укажи, где заканчивается старт и начинается сигнал MACD.

int start() 
{ 
//---- 

int total,ticket; //объявил тотал и тикет 
int signal = signal_MACD(); //сигнал МАКД передает значение в сигнал
AnalyzeSignal(signal); //аналайз сигнал анализирует сигнал
int MACD[8] = {0,1,2,3,4,5,6,7}; //создал одномерный массив МАКД
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7); 
///Бла-бла-бла
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0); 

total = OrdersTotal(); //тотал считает ордера
///Тут большая жирная закрывающая скобка, если конечно следующая строчка это функция
int signal_MACD()
 
splxgf:

Помогает копипаст каждой функции в отдельный файл и проверочная компиляция.

Если скобочки правильные, то укажи, где заканчивается старт и начинается сигнал MACD.


хм... int signal_MACD() - это действительно функция... но почему она должна быть за функцией старт? мне, честно говоря, не понятно, почему некоторые функции пишутся за пределами старт, а некоторые внутри... в чем разница?
 
Честно говоря не знаю можно ли описывать одну функцию в пределах другой, мне такого не встречалось.
Причина обращения: