Gatti

 
Уровень 5

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Поправить скрипт

Перестал работать скрипт на новых билдах, если можно поправьте. При размещении на график появляется окно «открыть ордер?» А должны появиться сначала линии. Это скрипт для расчёта позиции.
SendOrder (e).mq4 (8 Kb)
  • 0
  • Просмотров: 2820
  • 24 мая 2015, 22:25
  • Gatti
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
изменить настройки к сове
24 мая 2015
25 мая 2015

Брокер для ваших роботов, 15 лет на рынке

Комментарии (26)

+
0
Завтра буду смотреть.
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 24 мая 2015, 22:29
+
0
Быстро найти причину не удалось. Может еще покопаюсь на досуге.
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 25 мая 2015, 01:21
+
0
начал писать с нуля подобный. Устроит?
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 25 мая 2015, 13:50
+
0
Да, главное чтобы расчитывал позицию в валюте депозита, а не в %
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 15:16
+
0
Укажите формулу расчета лота? Сейчас рассчитывает в процентах от риска на стоп: www.opentraders.ru/downloads/752/

/+------------------------------------------------------------------+
Скрипт помогает открыть ордер «с рынка» при этом автоматически расчитывает размер лота
в соответствии с установленным Вами уровнем убытка (в процентах от депозита), открывает ордер и
устанавливает StopLoss и TakeProfit.
Вы перемещаете линию StopLoss (красная линия) — советник тут же пересчитывает размер лота
под заданный убыток Вами % убытка, и корректируете расположение TakeProfit (синяя линия).
Размер убытка (в %) нужно указать в настройках советника.
Чтобы установить ордер — удалите красную линию (линия StopLoss).
+------------------------------------------------------------------+
*/

avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 25 мая 2015, 17:40
+
0
Это советник
avatar

  8  poruchik Сообщений: 139

  • 25 мая 2015, 15:29
+
0
что?
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 16:09
+
0
не скрипт, а — советник
avatar

  8  poruchik Сообщений: 139

  • 25 мая 2015, 16:10
+
0
Реализовано в виде скрипта
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 25 мая 2015, 17:41
+
0
где?
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 16:13
+
0
перед глазами строчка должна быть какой лот получается и сколько процентов в стопе составляет спред при этом, как в том скрипте
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 18:10
+
0
Формулу не знаю, вот этот же скрипт работающий в процентах, потом мне программист добавил в него несколько строк, чтобы считал в валюте. Может это поможет
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 18:38
+
0
Формулу не знаю, вот этот же скрипт работающий в процентах, потом мне программист добавил в него несколько строк, чтобы считал в валюте. Может это поможет

//+------------------------------------------------------------------+
//| Version1.mq4 |
//| VadimVP |
//| poluyan@fxmail.ru |
//+------------------------------------------------------------------+
#property copyright «VadimVP»
#property link «poluyan@fxmail.ru»
#include <WinUser32.mqh>
/* /+------------------------------------------------------------------+
Скрипт помогает открыть ордер «с рынка» при этом автоматически расчитывает размер лота
в соответствии с установленным Вами уровнем убытка (в процентах от депозита), открывает ордер и
устанавливает StopLoss и TakeProfit.
Вы перемещаете линию StopLoss (красная мигающая линия) — советник тут же пересчитывает размер лота
под заданный убыток Вами % убытка, и корректирует расположение TakeProfit (синяя мигающая линия).
Размер убытка (в %) можно изменять прямо на графике перемещая красную стрелку вверх-вниз.
Линия TakeProfit размещается автоматически на том же удалении от цены что и StopLoss но умноженная на
коэффициент kProfitLine.
Чтобы установить ордер — удалите красную мигающую линию (линия StopLoss).
+------------------------------------------------------------------+
*/

// Параметры советника:

double LOSSmin = 2;// минимальный процент убытка (диапазон изменений, нижний предел)
double LOSSmax = 4;// максимальный процент убытка (диапазон изменений, верхний предел)
double MaxLot = 6;// максимально разрешенный Вами лот для ордера
double kProfitLine = 5;// отношение прибыли к убытку, коэффициент TakeProfit = kProfitLine * TrailingStop
color clrOK = Blue; // Цвет шрифта OK
color clrNO = Red; // Цвет шрифта NOT OK
int font = 11; // Размер шрифта

//-------------------------------------------------------------------+

// Формула коррекции % профита Прибыль(%) = ( 100 / ( (100 — Убыток)/100) ) — 100; (в %) можно применить если стоп от 5% депозита и выше

double PFL; color clr; double DilerPercent = 0;
int iii = 0; double STL = 0; double LOT = 0; double deltareal=1; double LOSS = 0.1;

int init() {linebye();return(0);}
int deinit(){Comment (" ");ObjectDelete («10»);ObjectDelete («123»);ObjectDelete( «Profit»);ObjectDelete («321»);ObjectDelete( «label123»);return(0); }
int start()
{
//----
if (IsConnected()) {

while ( ObjectFind(«Label123»)!=(-1) )
{if (ObjectFind(«Label123») == (-1)) {linebye();}
if (ObjectFind(«123») == (-1)) {ObjectCreate («123»,OBJ_TEXT,0,Time[WindowBarsPerChart( )/3] ,WindowPriceMax() — (WindowPriceMax() — WindowPriceMin())/10 );
ObjectSetText(«123», «Старт скрипта», font, «Arial», clr);}
if (ObjectFind(«321») == (-1)) {ObjectCreate («321»,OBJ_ARROW,0,Time[WindowBarsPerChart( )/2] ,WindowPriceMin()+((WindowPriceMax() — WindowPriceMin())/10) );
ObjectSet(«321», OBJPROP_ARROWCODE, 231); ObjectSet(«321», OBJPROP_WIDTH, 2); }

STL = ObjectGet(«Label123», 1); textset(); DrowProfitLine();
if (iii == 5) {Sleep (30); ObjectSet( «label123», 6, Red); ObjectSet( «Profit», 6, Blue); WindowRedraw( ) ;} else Sleep (30);
if (iii == 10) {Sleep (30); ObjectSet( «label123», 6, PeachPuff);ObjectSet( «Profit», 6, LightBlue); WindowRedraw( ) ;} else Sleep (30);
if (iii >= 10) iii = 0; iii = iii+1;
}
//-----------------------------------
ObjectCreate( «label123», OBJ_HLINE, 0, 0, STL); ObjectSet( «label123», 6, Red);
ObjectSet( «label123», 8, 3);WindowRedraw( );

if (MessageBox (" Открыть ордер ??? ",«Скрипт интересуется:»,1)==1) startset();
} else MessageBox («Нет соединения с сервером!!!»," Скрипт сообщает:",0x00000000);
//----
return(0);
}
//+------------------------------------------------------------------+

int linebye() {// Рисуем линию (которая мигает)
ObjectDelete( «label123»);
ObjectCreate( «label123», OBJ_HLINE, 0, 0, (MarketInfo( Symbol(), MODE_BID) -Point*((MarketInfo(Symbol(), MODE_STOPLEVEL)+10*MathPow(10,Digits)/10000 ))) );
ObjectSet( «label123», 6, White); ObjectSet( «label123», 8, 2); WindowRedraw( );
return(0); }
//+------------------------------------------------------------------+
double textset() {
double delta = WindowPriceMax() — WindowPriceMin();
double PriceMax = WindowPriceMax() — delta/10;
double PriceMin = delta/10 + WindowPriceMin();
if (ObjectGet(«321», 1) > PriceMax) ObjectSet(«321»,1,PriceMax);
if (ObjectGet(«321», 1) < PriceMin) ObjectSet(«321»,1,PriceMin);
double deltascreen = PriceMax — PriceMin;
LOSS = (((ObjectGet(«321», 1)-PriceMin)/deltascreen)*(LOSSmax — LOSSmin))+LOSSmin;
if (STL > (MarketInfo( Symbol(), MODE_ASK) + Point*MarketInfo(Symbol(), MODE_STOPLEVEL))) deltareal = (STL — MarketInfo( Symbol(), MODE_BID) )/Point;
if (STL < (MarketInfo( Symbol(), MODE_BID) — Point*MarketInfo(Symbol(), MODE_STOPLEVEL))) deltareal = (MarketInfo( Symbol(), MODE_ASK) — STL)/Point;
LOT = ((AccountFreeMargin()*(LOSS/100))/MarketInfo(Symbol(), MODE_TICKVALUE))/deltareal;
LOT = Round(LOT);
double LOSSreal = (LOT*deltareal*MarketInfo(Symbol(), MODE_TICKVALUE)/AccountFreeMargin())*100;
if (MathAbs(LOSS-LOSSreal) < MathAbs(LOSS*0.1)) clr = clrOK; else clr = clrNO;//меняем цвет шрифта

ObjectSetText(«123»,«Задача:LOSS=»+DoubleToStr(LOSS,1)+" % "+"; Получим:LOT="+DoubleToStr(LOT,2)+", LOSS="+DoubleToStr(LOSSreal,2)+"% (Спред="+ DoubleToStr(DilerPercent*100,1)+"%)", font, «Arial», clr);

WindowRedraw( );
Comment ( «Сумма возможного убытка = „+DoubleToStr(AccountFreeMargin()*LOSSreal/100,0));
return(0); }

int startset() {

//-----
Alert (“!!! Пожалуйста дождитель окончания работы скрипта!»);
int resi = 0;
STL = MathRound (STL * MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS)) );
STL = STL / MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS));
PFL = MathRound (PFL * MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS)) );
PFL = PFL / MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS));

Print(«линии Стопов, Цены Открытия и Профита: »,STL,", ",MarketInfo( Symbol(), MODE_BID),", ",PFL);

if (STL>MarketInfo( Symbol(), MODE_ASK) ) resi = OrderSend (Symbol(),OP_SELL,LOT, MarketInfo( Symbol(), MODE_BID), 10, STL, PFL );
if (STL<MarketInfo( Symbol(), MODE_BID) ) resi = OrderSend (Symbol(),OP_BUY,LOT, MarketInfo( Symbol(), MODE_ASK), 10, STL, PFL );

Alert ("***************************************************");
if (resi == (-1))
Alert ("!!! Неудачное открытие ордера! Повторите попытку! Ошибка №: "+GetLastError());
else Alert («Ордер открыт успешно, результат: „+resi);
Alert (“************ информация от скрипта ************»);

return(0); }

void DrowProfitLine()
{

// ObjectDelete( «Profit»);
if (ObjectFind(«Profit») == (-1)){
ObjectCreate( «Profit», OBJ_HLINE, 0, 0, (MarketInfo( Symbol(), MODE_ASK) +Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL))) );
ObjectSet( «Profit», 6, Blue); ObjectSet( «Profit», 8, 2); WindowRedraw( ) ;}

if (STL > (MarketInfo( Symbol(), MODE_ASK) +Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL)))) {PFL = MarketInfo( Symbol(), MODE_BID) — ((STL-MarketInfo( Symbol(), MODE_BID) )*kProfitLine );
DilerPercent = (MarketInfo( Symbol(), MODE_ASK) — MarketInfo( Symbol(), MODE_BID)) / (STL-MarketInfo( Symbol(), MODE_BID) ); }
if (STL < (MarketInfo( Symbol(), MODE_BID) -Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL)))) {PFL = MarketInfo( Symbol(), MODE_ASK) + ((MarketInfo( Symbol(), MODE_ASK) -STL)*kProfitLine );
DilerPercent =(MarketInfo( Symbol(), MODE_ASK) — MarketInfo( Symbol(), MODE_BID)) / (MarketInfo( Symbol(), MODE_ASK) -STL); }
if (STL > (MarketInfo( Symbol(), MODE_BID) -Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL))) && STL < (MarketInfo( Symbol(), MODE_ASK) +Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL)))) ObjectDelete( «Profit»);

ObjectSet( «Profit», 1, PFL );
WindowRedraw( );

}
double Round(double A1) // Функция округляет А1 до Шага Лота и проверяет нижнюю границу и верхние границы
{
A1 = MathRound (A1 / MarketInfo(Symbol(), MODE_LOTSTEP));
A1 = A1 * MarketInfo(Symbol(), MODE_LOTSTEP);

if (A1 < MarketInfo(Symbol(), MODE_MINLOT)) A1 = MarketInfo(Symbol(), MODE_MINLOT);
if (A1 > MaxLot) A1 = MaxLot;
if (A1 > (AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED))) A1 = (AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)); //средства для открытия 1 лота
return(A1);
}
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 18:45
+
0
avatar

  8  poruchik Сообщений: 139

  • 25 мая 2015, 21:27
+
0
Ага все гляну завтра
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 25 мая 2015, 21:42
+
0
я автору топика писал <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; '>&nbsp; '>&nbsp; 
по ссылке 2 скрипта
(вроде изображаются как автор топика просил), но работу дальше их не проверял
=============================
исходный код на форуме mql есть, там 2 скрипта — покупка с рынки и отложка (но они перестали работать)
а мы имеем дело с переработкой (недоработкой)
ошибка, как написано было Label123 и label123
Редактирован: 25 мая 2015, 22:01
avatar

  8  poruchik Сообщений: 139

  • 25 мая 2015, 21:46
+
0
Label123 и label123
Ааа я и не заметил *pardon* 
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 25 мая 2015, 21:56
+
0
Спасибо за скрипты поручик, всё работает
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 21:52
+
0
да не за что, главное проблему решили *budenov* 
avatar

  8  poruchik Сообщений: 139

  • 25 мая 2015, 21:58
+
0
а как оно изменилось?
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 22:00
+
0
оно что?
avatar

  8  poruchik Сообщений: 139

  • 25 мая 2015, 22:02
+
0
Label
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 22:06
+
0
ну кто переделывал, тот и внес ошибку
(е)- обычно эвил ставит в переделанных индикаторах
avatar

  8  poruchik Сообщений: 139

  • 25 мая 2015, 22:20
+
0
так он работал сначала, потом на новом билде перестал
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 22:25
+
0
новый какой? 825
avatar

  8  poruchik Сообщений: 139

  • 25 мая 2015, 22:38
+
0
с 600 -го вроде
avatar

  5  Gatti Автор Сообщений: 53

  • 25 мая 2015, 22:45

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий