[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 87
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Извините, но это - точно в Анналы. Незнание английского языка не освобождает от ответственности.
Не знаю я, какой спред на EURUSD на микро, честно. Вероятно, Вам на этот форум вход заказан. Эти гады все время что-нибудь придумают - только чтобы Вас туда не пустить.
Здравствуйте, помогите пожалуйста с одним, как я полагаю элементарным, моментом.
int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,0,0);
Alert(GetLastError());
return;
}
Скрипт открывает рыночный ордер, всё ок. Но если я выставляю какое либо значение SL или TP, то выдаётся ошибка "неправильные стопы".
int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,Bid-50*Point,Bid+50*Point);
Alert(GetLastError());
return;
}
Вот этот код уже не работает. В чём дело? Никак не могу догнать...
int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,1.31845,1.40000);
Alert(GetLastError());
return;
}
Причём не работает, даже если я ввожу численные значения стопа и профита. С минимальной дистанцией от ордера до стоп приказа всё ок.
Уважаемые профессионалы! Возник вопрос. Есть советник, торгует по нескольким критериям, как сделать чтобы он модифицировал ордера раздельно? например открыто два BUY по разным сигналам, у одного уровень безубытка 90пп с шагом 40, у другого 50 с шагом 50. как только не пробовал не получается. Помогите кто знает. Заранее спасибо!
Уважаемые профессионалы! Возник вопрос. Есть советник, торгует по нескольким критериям, как сделать чтобы он модифицировал ордера раздельно? например открыто два BUY по разным сигналам, у одного уровень безубытка 90пп с шагом 40, у другого 50 с шагом 50. как только не пробовал не получается. Помогите кто знает. Заранее спасибо!
-можно организовать открытие сделок по разным сигналам с разными Magic-номерами
-можно при открытии сделок ставить "метки" (например тот же уровень трала) в поле комментарий и потом его анализировать
не видя кода по вашему вопросу не совсем понятно что именно Вы хотите делать раздельно
код примерно такой:
for( int c=1; c<=OrdersTotal(); c++) // Цикл перебора ордер
{
OrderSelect(c-1,SELECT_BY_POS); // Если есть следующий
// Анализ ордеров:
if(OrderMagicNumber()<1000)
if (R==1 && SL<OrderOpenPrice() && Bid-OrderOpenPrice()>((NoLoss)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*(NoLoss),OrderTakeProfit(),0,Blue);
return;
}
if (R==2 && SL>OrderOpenPrice() && OrderOpenPrice()-Ask>((NoLoss)*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*(NoLoss),OrderTakeProfit(),0,Blue);
return;
}
if (R==1 && SL>=OrderOpenPrice() && Bid - SL > ((NoLoss*Point)+(StepLoss*Point)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss,OrderTakeProfit(),0,Blue);
return;
}
if (R==2 && SL<=OrderOpenPrice() && SL-Ask>((NoLoss*Point)+(StepLoss*Point)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss,OrderTakeProfit(),0,Blue);
return;
}
return;
}
//--------------------------------------------------------------------
for(c=1; c<=OrdersTotal(); c++) // Цикл перебора ордер
{
OrderSelect(c-1,SELECT_BY_POS); // Если есть следующий
// Анализ ордеров:
if (OrderMagicNumber()>1000)
if (Z==3 && Bid-OrderOpenPrice()>((NoLoss1)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z==4 && SL1>OrderOpenPrice() && OrderOpenPrice()-Ask>NoLoss1*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z==3 && SL1>=OrderOpenPrice() && Bid - SL1 > ((NoLoss1*Point)+(StepLoss1*Point)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z==4 && SL1<=OrderOpenPrice() && SL1-Ask>((NoLoss1*Point)+(StepLoss1*Point)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
return;
}
//--------------------------------------------------------------------
// Стоимость ордеров
RefreshRates(); // Обновление данных
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Миним. колич. лотов
Free =AccountFreeMargin(); // Свободн средства
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
Step =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размера
if (Lots > 0) // Если заданы лоты,то
Lts =Lots; // с ними и работаем
else // % свободных средств
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Для открытия
if(Lts < Min_Lot) Lts=Min_Lot; // Не меньше минимальн
if (Lts*One_Lot > Free) // Лот дороже свободн.
{
Alert(" Не хватает денег на ", Lts," лотов");
return; // Выход из start()
}
//--------------------------------------------------------------- 8 --
// Открытие ордеров
{
if (Total<2 && Opn_B==true && B==false)
{
// критерий откр. Buy
RefreshRates(); // Обновление данных
SL=Bid - New_Stop(StopLoss)*Point; // Вычисление SL откр.
TP=Bid + New_Stop(TakeProfit)*Point; // Вычисление TP откр.
Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,NULL,y);//Открытие Buy
if (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
B=true;
S=false;
Y=OrderMagicNumber();
R=1;
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок
continue; // Повторная попытка
// Выход из start()
}
if (Total<2 && Opn_S==true && S==false) // Открытых орд. нет +
{
Sleep(10000); // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=Ask + New_Stop(StopLoss)*Point; // Вычисление SL откр.
TP=Ask - New_Stop(TakeProfit)*Point; // Вычисление TP откр.
Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,NULL,y);//Открытие Sel
if (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Sell ",Ticket);
S=true;
B=false;
Y=OrderMagicNumber();
R=2;
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок
continue; // Повторная попытка
// Выход из start()
}
if (Total<2 && Opn_B1==true && B1==false)
{
RefreshRates(); // Обновление данных
SL1=Bid - New_Stop1(StopLoss1)*Point; // Вычисление SL откр.
TP1=Bid + New_Stop1(TakeProfit1)*Point; // Вычисление TP откр.
Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL1,TP1,NULL,x);//Открытие Buy
if (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
B1=true;
S1=false;
X=OrderMagicNumber();
Z=3;
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок
continue; // Повторная попытка
// Выход из start()
}
if (Total<2 && Opn_S1==true && S1==false) // Открытых орд. нет +
{
Sleep(10000); // критерий откр. Sell
RefreshRates(); // Обновление данных
SL1=Ask + New_Stop1(StopLoss1)*Point; // Вычисление SL откр.
TP1=Ask - New_Stop1(TakeProfit1)*Point; // Вычисление TP откр.
Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL1,TP1,NULL,x);//Открытие Sel
if (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Sell ",Ticket);
S1=true;
B1=false;
X=OrderMagicNumber();
Z=4;
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок
continue; // Повторная попытка
// Выход из start()
}
break; // Выход из while
}
код примерно такой:
код примерно такой:
for( int c=1; c<=OrdersTotal(); c++) // Цикл перебора ордер
{
OrderSelect(c-1,SELECT_BY_POS); // Если есть следующий
// Анализ ордеров:
if(OrderMagicNumber()<1000)
if (R==1 && SL<OrderOpenPrice() && Bid-OrderOpenPrice()>((NoLoss)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*(NoLoss),OrderTakeProfit(),0,Blue);
return;
}
if (R==2 && SL>OrderOpenPrice() && OrderOpenPrice()-Ask>((NoLoss)*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*(NoLoss),OrderTakeProfit(),0,Blue);
return;
}
if (R==1 && SL>=OrderOpenPrice() && Bid - SL > ((NoLoss*Point)+(StepLoss*Point)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss,OrderTakeProfit(),0,Blue);
return;
}
if (R==2 && SL<=OrderOpenPrice() && SL-Ask>((NoLoss*Point)+(StepLoss*Point)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss,OrderTakeProfit(),0,Blue);
return;
}
return;
}
//--------------------------------------------------------------------
// В принципе, дальше можно ничего не писать: все равно выполняться не будет
for(c=1; c<=OrdersTotal(); c++) // Цикл перебора ордер
{
OrderSelect(c-1,SELECT_BY_POS); // Если есть следующий
// Анализ ордеров:
if (OrderMagicNumber()>1000)
if (Z==3 && Bid-OrderOpenPrice()>((NoLoss1)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z==4 && SL1>OrderOpenPrice() && OrderOpenPrice()-Ask>NoLoss1*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z==3 && SL1>=OrderOpenPrice() && Bid - SL1 > ((NoLoss1*Point)+(StepLoss1*Point)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z==4 && SL1<=OrderOpenPrice() && SL1-Ask>((NoLoss1*Point)+(StepLoss1*Point)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
return; // Но "для надежности" сделан еще и "контрольный выстрел" ;)
}
........ Все остальное не имеет значения .......
//
//--------------------------------------------------------------------
// Стоимость ордеров