Начинаю кодить? - страница 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