GUOのファン - ページ 2

 
すみません、グオスクリプトの詳しい説明をお願いします。

一般的な機能と使い方を教えてください。

おつかれさまでした
 
<br /> translate="no"> ホーン 06.02.05 06:45
インジケータにMessageBoxを使って、実行速度を遅くするというアイデアは素晴らしいです。たぶん、想像もつかなかったと思います。インタラクティブな受発注の可能性が広がります。コンポストさんに敬意を表します
実装を批判している人については、なぜ「粗い」と言われるのかわかりません。
このスクリプトを使えば、多くのトレーダーにとって、非常に便利な注文ができるようになると思います。


ホーン、思ったことを言っただけで、まったく叱ってないんですよ。だから、次回はぜひ考えてみてください。
グッドラック :)
 
Flower_of_Life 06.02.05 17:42

チャートに転送します。アタッチメントポイント - 始値。ストップロス - - 50ポイント、テイクプロフィット - +50ポイント。
必要なレベルにラインを移動し、okを押すと、注文されます(テイクプロフィットは 削除可能)。

Openprice_line が市場価格より高ければ、注文は Buy Stop か Sell Limit (Stop Loss に依存)、低ければ Sell Stop か Buy Limit (同じ) になります。


スクリプトは非常に粗く、チェックもなく、すべてがランダムです =))


は熱中するでしょう - 私たちはこれを改善します :))
 
ということは、線のすぐ上にストップやプロフィットをドラッグすることは可能なのでしょうか?
 
専門家であるライターはどう進めるべきか。

ご教示ありがとうございます。是非とも考慮し、二度と注文で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), "Error", MB_OK |MB_ICONERROR|MB_TOPMOST) を実行します。
 
ホーン、思ったことを言っただけで、まったく叱ってないんですよ。では、次回は何か書くことを考えてください。<br /> translate="no">。

すみません、怒ってしまって。
 
ストップとプロフィットをラインの上にドラッグできるのですか?

それが魅力なんです!

をコンポストへ。
難しいことでなければ、いろいろなチェックを入れるなどして、スクリプトを洗練させてください。
そして、3つの素晴らしい脚本が出来上がるのです。

1.注文を保留するためのもの。
2.成行買い 注文の場合、1枚。
3. 成行売り注文の場合、1枚。
それだけじゃダメなんだ!

そして、他の追加機能を探し続けることになります。もしかしたら、皆さんからヒントをいただいたり、「具体的にこうしてほしい」という要望があるかもしれませんので...。そして、さらに素晴らしいのは、誰かが開発に参加することです;)
 
MessageBoxは MQL4の標準関数で導入したほうがよさそうなので、明示的にDLL関数呼び出しを許可する必要はないでしょう。そして、より速く動作するようになります。
 
レナトゥです。
エキスパートコードをコンパイルすると、エラー警告
4107」-別の値での再定義
リクエストメッセージを記録する」行に移動します。
何をオーバーライドする必要があるのか?