Начинаю кодить? - страница 2

 
Prival писал (а) >>

посчитайте количество левых и правых скобок

Да уже вижу что несовпадает количество 9 левых и 5 правых,если б еще знать куда их ставить?

 

зачем такой вагон ретурнов???

  double pldot_0=iCustom(NULL,0,"PLdot",0,0);//берем значение с 0го бара
//------------------
  if(Close[0]>pldot_0)
   {
    //открываем ордер на покупку
     }
  if(Close[0]<pldot_0)
   {
   //открываем ордер на продажу
    }
//-------------------
  if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) 
   {
   if(OrderType()==OP_BUY) 
    {
     if(Close[0]<pldot_0)
      {
       OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
        }
     if(Close[0]>pldot_0)
      {
       OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
        }
     }
    }  
//------------------
 

Что у меня не получаеться как надо подскажите уважаемые люди,тяжело мне одному понимать.

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

Вот кусок кода.

int start()
{
double pldot_0=iCustom(NULL,0,"PLdot",0,0);//берем значение с 0го бара

if(Close[0]>pldot_0)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd signal",16384,0,Red); // исполняем
if(GetLastError()==0)Print("Order opened : ",OrderOpenPrice());
return(0);
}
if(Close[0]<pldot_0)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red); // исполняем
if(GetLastError()==0)Print("Order opened : ",OrderOpenPrice());
return(0);
}

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(Close[0]<pldot_0)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
}
if(Close[0]>pldot_0)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
}
}
}
return(0);
}
//------------------

 
Люди так тяжело одному все понять.Помогите пожалуйста,так хочеться понять хотя бы азы програмирования.Подскажите в чем и где моя ошибка,если можно с подробным описанием этой ошибки.
 
'Запрет торговли в одном баре.' пользуйтесь поиском. Всегда считайте что кто то гдето уже подобное делал. Экономте свое время это единствееная Ваша ценность остальное не так важно
 

Вот кусочек кода для блокирования ножества открытых позиций но почему она у меня выдает ошибку,может я не туда её вставил(сразу после int start()),а может просто в код надо что то дописать,гуру подскажите чайнику.


{
int total, ticket, cnt;

if (OpenCondition)--------вот эта переменная не определена
{
total = OrdersTotal();
if (total > 0)
{
OrderSelect(total - 1, SELECT_BY_POS, MODE_TRADES); // последний открытый или модифицированный ордер будет последним в списке
if (OrderOpenTime() < Time[0]) // Открыт раньше текущего бара?
OrderSend(...);
}
}


 
Может мне кто нибудь даст ссылку на внятное описание че и куда.Учебник по MQL совсем не подходит для полных новичков,там конечно все прекрасно написано за что отвечает каждая функция,а вот что и куда и как все это взаимосвязоно вот с эти у меня большие проблемы.Нашел несколько шаблонов,но толку от них то же мало,они основаны на написание советников по стандартным индюкам.
 
poiskspider писал (а) >>

Вот кусочек кода для блокирования ножества открытых позиций но почему она у меня выдает ошибку,может я не туда её вставил(сразу после int start()),а может просто в код надо что то дописать,гуру подскажите чайнику.


{
int total, ticket, cnt;

if (OpenCondition)--------вот эта переменная не определена
{
total = OrdersTotal();
if (total > 0)
{
OrderSelect(total - 1, SELECT_BY_POS, MODE_TRADES); // последний открытый или модифицированный ордер будет последним в списке
if (OrderOpenTime() < Time[0]) // Открыт раньше текущего бара?
OrderSend(...);
}
}


Ты сам определил ошибку. Если какая-нибудь переменная не определена. Что нужно сдеалать?.. Объявить.

В твоем случае надо сделать так.

bool OpenCondition=false;

if (OpenCondition)

{............

Я так понимаю по контексту OpenCondition - это условие открытия позиции.

Например, с твоим индюком может выглядеть так:

.....

bool OpenCondition=pldot_0>Close[0];

if (OpenCondition)

{

//открываем SELL

}

Не знаю как ты читал учебник, но там про переменные ясно написано

Переменные должны быть объявлены перед их использованием.

Для проверки уже открытых позиций можно для тестера можно использовать OrdersTotal(), а вообще используют подобную функцию:

bool ExistPostion(int magic) 
{ 
  bool exist=False;
  int total=OrdersTotal();
  string symbol=Symbol(); 
  for(int i=0; i<total; i++) 
  { 
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
    { 
      if(OrderSymbol()==symbol && OrderMagicNumber()=magic)
      {
          exist=true; 
          break; 
      } 
    } 
  } 
  return(exist); 
}

и соответственно ПРИМЕР её использования:

int start()
{
 ............
 if(ExistPosition())
 {
    if(/*сигнал на buy*/)
    {
        //тут открываем buy
    } else if(/*сигнал на sell*/)
    {
        //тут открываем sell
    } 
  }
}
Чтобы легко было расставлять скобки используй отступы. Чтобы разобраться в программировании читай статьи.
 

Скажите уважаемые люди почему у меня вот поэтому сигналу не закрываються ордера.ЧТО НАДО ИСПРАВИТЬ,А МОЖЕТ НАДО ДОПИСАТЬ.

//+------------------------------------------------------------------+
//| Закрытие позиции |
//+------------------------------------------------------------------+
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
if(Close[0]<pldot_0)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
return(0);
}
}
if(Close[0]>pldot_0)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
}
}
return(0);
}
}
//------------------

 
poiskspider писал (а) >>

Скажите уважаемые люди почему у меня вот поэтому сигналу не закрываються ордера.ЧТО НАДО ИСПРАВИТЬ,А МОЖЕТ НАДО ДОПИСАТЬ.

//+------------------------------------------------------------------+
//| Закрытие позиции |
//+------------------------------------------------------------------+
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
if(Close[0]<pldot_0)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
return(0);
}
}
if(Close[0]>pldot_0)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
}
}
return(0);
}
}
//------------------

как минимум поменяйте местами Ask Bid

бай можно закрывать только по Ask

селл по Bid

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