Поклонникам ГУО - страница 2

 
Извините, а можно получить подробное описание скрипта для гуо?

что он вообще делает? и как это использовать?

заранее спасибо
 

Horn 06.02.05 06:45
Идея использования MessageBox'а для того чтобы индикатор притормозил своё исполнение отличная. Я бы, наверное, никогда не догадался бы. Она открывает много возможностей для интерактивного выставления ордеров. Мой Вам респект, komposter!
Что касается личностей ругающих реализацию, то не совсем понятно чем они руководствуются говоря, что реализация "сырая".
Я уверен, что многим будет очень удобно работать с Вашим скриптом для выставления отложенных ордеров.


Horn, я сказал что думаю, и совсем никого не ругал. Так что в следующий раз пожалуйста подумайте когда догадаетесь чтото написать.
Удачи :)
 
Flower_of_Life 06.02.05 17:42

переносишь на график. точка прикрепления - цена открытия. стоплосс - -50 пунктов, тейкпрофит - +50 пунктов.
передвигаешь линии на нужные уровни (тейк профит можно удалить), нажимаешь ОК, выставляется ордер.

если опенпрайс_линия выше рыночной цены - ордер будет или байстоп или селллимит (от стоплосс зависит), если ниже - селлстоп или байлимит (то же самое).


скрипт очень сырой, никаких проверок нет, всё наобум =)))


будет энтузиазм - доработаем :))
 
так что прямо за линии можно перетаскивать стопы и профиты?
 
Как надо действовать писателю экспертов:

Спасибо за пояснения, обязательно учтём и больше не будем делать while(true) с ордерами.

Вот тот же ордер но модифицированный для того чтобы продавать.
(Надеюсь всё что надо изменил)

//+------------------------------------------------------------------+
//|                                                   order_sell.mq4 |
//|                              Copyright c 2004, Alexander Ivanov. |
//|                                        mailto:alexander@indus.ru |
//+------------------------------------------------------------------+
//| Разрешите импорт функций из библиотек через:                     |
//| "Сервис -> Настройки -> Советники -> Разрешить импорт DLL"       |
//+------------------------------------------------------------------+
#property copyright "Copyright c 2004, Alexander Ivanov."
#property link      "mailto:alexander@indus.ru"

#include <WinUser32.mqh>
#include <stdlib.mqh>
#include <stderror.mqh>
//+------------------------------------------------------------------+
//| Указываем количество последних дней, на которых ищем минимум     |
//| для установки стоплосса                                          |
//+------------------------------------------------------------------+
#define DAYS_TO_CONSIDER 3
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init() { return(0); }
int deinit()
  {  
//---- просто удалим свои линии стопов
   ObjectDelete( "order_sell_Stop_Loss_Line");
   ObjectDelete( "order_sell_Take_Profit_Line");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Основная функция скрипта                                         |
//+------------------------------------------------------------------+
int start()
  {
   double DaysLowArray[];
   double dMyStopLoss = 0;  
   double dMyPrice = 0;
   double dMyTakeProfit = 0;
   double dMyLots = 0;
//---- скопируем массив дневных данных
   if(ArrayCopySeries(DaysLowArray, MODE_HIGH, Symbol(),PERIOD_D1) < DAYS_TO_CONSIDER) 
     {
      return(-1);
     }
//---- расчет цен
   dMyPrice      = Bid;
   dMyStopLoss   = DaysLowArray[Highest(Symbol(),PERIOD_D1,MODE_HIGH,DAYS_TO_CONSIDER,0)];
   dMyTakeProfit = dMyPrice - 2*MathMax((MathAbs(Ask-Bid)/2),MathAbs(dMyPrice-dMyStopLoss));
   dMyStopLoss  += 10*Point;
   dMyLots       = 0.1;
//---- выставим линии для визуального управления стопами
   ObjectCreate( "order_sell_Stop_Loss_Line", OBJ_HLINE, 0, 0, dMyStopLoss, 0, 0, 0, 0 );
   ObjectSet( "order_sell_Stop_Loss_Line", OBJPROP_COLOR, Red );
   ObjectSetText( "order_sell_Stop_Loss_Line", "Stop_Loss_Line", 6, "Arial", Red );

   ObjectCreate( "order_sell_Take_Profit_Line", OBJ_HLINE, 0, 0, dMyTakeProfit, 0, 0, 0, 0 );
   ObjectSet( "order_sell_Take_Profit_Line", OBJPROP_COLOR, Lime );
   ObjectSetText( "order_sell_Take_Profit_Line", "Take_Profit_Line", 6, "Arial", Lime );
//---- запросим подтверждение на отработку
   string quest="Вы хотите продать "+DoubleToStr(dMyLots,2)+" "+Symbol()+" по цене Bid "+
                DoubleToStr(dMyPrice,Digits)+"    \n\n"+
                "Переместите выставленные линии на необходимые уровни и нажмите ОК           \n"+
                "(красная линия - Stop Loss, зеленая - Take Profit)\n\n"+
                "Нажмите Отмена чтобы отказаться от сделки";
   if(MessageBoxA(0,quest,"Визуальная установка ордера на продажу",
                  MB_OKCANCEL | MB_ICONASTERISK | MB_TOPMOST)!=IDOK) return(-2);
//---- трейдер согласился, возьмем новые уровни стопов и обязательно проверим их!
   dMyStopLoss  =NormalizeDouble(ObjectGet( "order_sell_Stop_Loss_Line", OBJPROP_PRICE1),Digits);
   dMyTakeProfit=NormalizeDouble(ObjectGet( "order_sell_Take_Profit_Line",OBJPROP_PRICE1),Digits);
   
   if((dMyStopLoss>0 && dMyStopLoss<Bid) || (dMyTakeProfit>0 && dMyTakeProfit>Bid))
     {
      Print("Неправильно выставлены уровни Stop Loss и Take Profit!");
      MessageBoxA(0,"Неправильно выставлены уровни Stop Loss и Take Profit!         \n"+
                    "Операция отменена\n\n",
                    "Визуальная установка ордера на продажу",MB_OK | MB_ICONSTOP | MB_TOPMOST);
      return(-3);
     }
//---- выведем в лог сообщение об заявке
   Print("sell ",DoubleToStr(dMyLots,2)," ",Symbol()," at ",DoubleToStr(dMyPrice,Digits),
         "sl ",DoubleToStr(dMyStopLoss,Digits)," tp ",DoubleToStr(dMyTakeProfit,Digits));
//---- пробуем послать команду
   int ticket=OrderSend(Symbol(),OP_SELL,dMyLots,dMyPrice,3,dMyStopLoss,dMyTakeProfit,
                        "Ordered by \"order_sell\" script" ,255,0,HotPink);
   if(ticket>0) // все отлично - заявка прошла
     {
      //---- сразу же выведем в лог подтверждение
      Print("#",ticket," sell ",DoubleToStr(dMyLots,2)," ",Symbol()," at ",
            DoubleToStr(dMyPrice,Digits)," is done");
      //---- покажем окно 
      if(MessageBoxA(0,"Ордер успешно исполнен     \nРаспечатать его?",
		     "Визуальная установка ордера на продажу", MB_YESNO | MB_ICONASTERISK | MB_TOPMOST)==IDYES)
		  {
         OrderPrint();
        }
      //---- все ок, выходим
      return(0);
     }
//---- тут все плохо - выведем в лог сообщение
   int err=GetLastError();
   Print("sell ",DoubleToStr(dMyLots,2)," ",Symbol()," at ",
         DoubleToStr(dMyPrice,Digits)," failed [",ErrorDescription(err),"]");
//----покажем окно
   MessageBoxA(0,ErrorDescription(err), 
               "Ошибка визуальной установки ордера", MB_OK | MB_ICONERROR | MB_TOPMOST); 
   return(-4);
  }
//+------------------------------------------------------------------+
 
зы: если кто знает, как сделать месседж "поверх всех окон", скажите, плз.... а то так неудубно.....

я использовал MB_TOPMOST, попробуй, у меня вроде бы получилось.

а куда его писАть ?

Например вот сюда :)
MessageBoxA(0,ErrorDescription(err), "Ошибка", MB_OK | MB_ICONERROR | MB_TOPMOST);
 
Horn, я сказал что думаю, и совсем никого не ругал. Так что в следующий раз пожалуйста подумайте когда догадаетесь чтото написать.

Прошу прощения, вспылил.
 
так что прямо за линии можно перетаскивать стопы и профиты?

Так в этом-то и кайф!

to Komposter:
Если будет не трудно, доработай пожалуйста свой скрипт чтобы были всяческие проверки и т.д.
И тогда у нас будет три великолепных скрипта:

1. один для выставления отложенных ордеров;
2. один для рыночного ордера на покупку;
3. один для рыночного ордера на продажу.
Это уже не мало!

А потом продолжим искать другие дополнительные фичи, может быть народ подсказки какие-нибудь будет давать или просить сделать что-то конкретное... а что будет ещё приятнее, так это если кто-то подключится к разработкам ;)
 
Похоже что MessageBox надо вводить в стандартные функции MQL4 чтобы не надо было явно разрешать вызов функций DLL. Да и работать быстрее будет.
 
Renatu.
При компиляции кода експерта предупреждение об ошибке
'4107'-redefinition with other value
Отправляет к строке "выведем в лог сообщение об заявке"
Что нужно переопределить?
Причина обращения: