そして、それを「漫画」にしよう(多通貨化) - ページ 6

 
Swan >> :

エラー130をずっと繰り返している。

StopLevelは、StopLossとEnterのために、チェックする必要があります。


然も

は、一番高いものを選ぶべきなのでしょうか?


-130 おそらく、保留中の注文を設定しようとして、価格が上下に行ったため)コードの中で、Marketlevelでコメントされていない行があります... これは、将来の価格の追跡なので、このエラーはありません)。

-OrderOpenPriceの最安値または最高値(ストップ) 買いの場合、H4の0キャンドルと1キャンドルの最安値...と売りの最高値を更新しました・・・。一般的にストップ安/高

 
ALex2008 >> :

-130おそらく保留中の注文を設定しようとしたため、価格が高くなったり低くなったり)コード内の行があるMarketlevelでコメントされていない...これは、このエラーがないように、将来の価格の追跡です)。

-ストップはOrderOpenPriceの安値または高値) 買いの場合、H4の安値は0本と1本のローソク足を選択します...と売りの最高値を更新しました・・・。一般に、ストップ安・ストップ高は

それを修正するために、今度は買いの最高値安値と売りの最低値高値に行く。

または次のようになります。

StopLoss=MathMin(b0,b1);
StopLoss=MathMax(s0,s1);
 
Swan >> :

現在、買いでは最大の安値が、売りでは最小の高値が選ばれています。

論理的にはそうです、大丈夫です!)これがストップの選択です(2つの選択肢のうち、pt.で最も小さいものを選びます)


でも、あなたのバージョンはもっとシンプルで良いですよ...。訂正しておきますが、逆です)ありがとうございました。

StopLoss=MathMax(b0,b1);
StopLoss=MathMin(s0,s1);

5ページ目のコードを修正しました。

 
ALex2008 >> :

論理的にはそうです、大丈夫です!)これがストップの選択肢です(2つの選択肢のうち、pt.で最も小さいものを選んでいます)



タキ(一番小さいのを買う)

最初のバーでトロールするのと、一番大きなバーでトロールするのとでは、ロジックが違うからです。)


StopLevel。

Enterを変更することができます。

void UpTrend()
   {
   if(iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0
   && iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)
      {
      DellAllOrders();
      Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
      if( Enter-Ask< StopLevel) Enter=Ask+ StopLevel;
      OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Enter+ Profit, 0, 0,0, Green);
      }
   }

または注文を開始する

void UpTrend()
   {
   if(iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0
   && iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)
      {
      DellAllOrders();
      Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
      if( Enter-Ask< StopLevel)
      OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0, 0, Ask+ Profit, 0, 0,0, Green);
      else 
      OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Enter+ Profit, 0, 0,0, Green);
      }
   }

とか考える)

 
Swan писал(а)>>

一番小さいのを買うために滝)

最高値で買って、最初のバーでトラリピした方がいいというのは、理屈が違いますね。)

StopLevelで。

Enterを変更することができます。

または注文を開始する

または他のものを思いつくかもしれません)。

オープンプライスは、BidまたはAskからさらにStopLevelで指定する必要があります。建値からテイクポジションとストップポジションを取りますが、これもStopLevelに近づかないようにします。しかし、それらのために、我々は利益またはドローダウンによってクローズブロックを使用することがあります。

 
Swan >> :

...イミホは、最大で最初のバーをトロールするのが良い、別のロジック :)

この方法でもやったが、テスト結果は今の停止の方が良い)

 

ストッププレイを修正しました...

//-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
void UpTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)){
         DellAllOrders();
         Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
         if(Ask<= Enter- StopLevel){
         RefreshRates();
         OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Enter+ Profit, 0, 0,0, Green);}
      }
  }
void DownTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) >= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) < 0)){
         DellAllOrders();
         Enter=iLow(NULL,PERIOD_H4,1)-10*Point;
         if(Bid>= Enter+ StopLevel){
         RefreshRates();
         OrderSend(Symbol(), OP_SELLSTOP, 0.1, Enter, 0, 0, Enter- Profit, 0, 0,0, Green);}
      }
  }

   
//-------Вычисление стопа и утановка
void SetStop(){
      RefreshRates();
      b0=iLow(NULL,PERIOD_H4,0)-10*Point;
      b1=iLow(NULL,PERIOD_H4,1)-10*Point;
      s0=iHigh(NULL,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      s1=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
            
         if( Type==0){
            StopLoss=MathMax( b0, b1);//Функция возвращает максимальное из двух числовых значений
            if(Bid- StopLoss< StopLevel) StopLoss=MathMin( b0, b1); 
            else OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
         if( Type==1){
            StopLoss=MathMin( s0, s1);//Функция возвращает минимальное из двух числовых значений
            if( StopLoss-Ask< StopLevel) StopLoss=MathMax( s0, s1);
            else OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
   }


Swan >> :

...または、すぐに注文を開始することができます。

(未決済注文でエントリーした方がよっぽど安全です) そうしないと、証券会社やnofarmsに非常に遠くまで開かれてしまいます...))。

>> コードをいじった。

 
ALex2008 >> :

ストップ高を修正...


(ペンディングオーダーを使う方が良い) そうしないと、DCが何かを表示したり、nofarmsが非常に遠くまで開いてしまうからだ...))

>> コードを修正しました。

古いバグの修正、新しいバグの追加 :D


こちらも修正済み)

//+------------------------------------------------------------------+
//|                                                    CandyLite.mq4 |
//|                                                    Ш.Александр.В |
//|                                              shestovav@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Ш.Александр.В"
#property link      "shestovav@gmail.com"

#include <stdlib.mqh>

extern double Profit = 3000;

int Type, Ticket;
double Stop, StopLevel, b0, b1, s0, s1, StopLoss, Enter;
bool dwn, up, mod;

int init(){
   Profit*=Point; 
   return(0);
  }

int deinit() {
   return(0);
  }

int start() {
   StopLevel=Point*MarketInfo(Symbol(),MODE_STOPLEVEL);   // вычисление стоплевел //Point*
   
   if(! WorkOrders()){
      UpTrend();
      DownTrend();
   }
      
   if( WorkOrders()){
      if (( Type<=1)&& ( Stop==0)) SetStop();
      if (( Type==1)||( Type==5)) UpTrend();
      if (( Type==0)||( Type==4)) DownTrend();
   }

   return(0);
  }
//-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
void UpTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)){
         DellAllOrders();
         Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
         if(Ask< Enter- StopLevel+0.5*Point){
         OrderSend(Symbol(), OP_BUYSTOP, 0.1, Enter, 0, 0, Enter+ Profit, 0, 0,0, Green);}
      }
  }
void DownTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) >= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) < 0)){
         DellAllOrders();
         Enter=iLow(NULL,PERIOD_H4,1)-10*Point;
         if(Bid> Enter+ StopLevel-0.5*Point){
         OrderSend(Symbol(), OP_SELLSTOP, 0.1, Enter, 0, 0, Enter- Profit, 0, 0,0, Green);}
      }
  }

//-------Вычисление стопа и установка
void SetStop(){
      RefreshRates();
      b0=iLow(NULL,PERIOD_H4,0)-10*Point;
      b1=iLow(NULL,PERIOD_H4,1)-10*Point;
      s0=iHigh(NULL,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      s1=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
            
         if( Type==0){
            StopLoss=MathMax( b0, b1);//Функция возвращает максимальное из двух числовых значений
            if(Bid- StopLoss< StopLevel-0.5*Point) StopLoss=MathMin( b0, b1); 
            if(Bid- StopLoss> StopLevel-0.5*Point)//можно попробовать убрать строку
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
         if( Type==1){
            StopLoss=MathMin( s0, s1);//Функция возвращает минимальное из двух числовых значений
            if( StopLoss-Ask< StopLevel-0.5*Point) StopLoss=MathMax( s0, s1);
            if( StopLoss-Ask> StopLevel-0.5*Point)//можно попробовать убрать строку
            OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
         }
   }
   
//-------Удаление всех ордеров, открытых и отложенных
void DellAllOrders(){
      if( WorkOrders()){
      if( Type<=1)OrderClose( Ticket,OrderLots(),OrderClosePrice(),10);
      else OrderDelete( Ticket);}
  }
  
//-------Поиск ордеров
bool WorkOrders(){
      for (int i=OrdersTotal()-1; i>=0; i--){
      if (!OrderSelect( i, SELECT_BY_POS))  continue;
      if (OrderSymbol()!=Symbol())        continue;
      Type  = OrderType();
      Ticket=OrderTicket();
      Stop  =OrderStopLoss();
      return(true);}
  return(false);
  }
 
Swan >> :

古いバグの修正、新しいバグの追加 :D

何で

0.5*Point

また、MarketInfo()はdouble型を返しますが、なぜPointに変換するのでしょうか・・・?

それも...。の2つの条件があります。


if(Bid- StopLoss< StopLevel-0.5*Point) StopLoss=MathMin( b0, b1); 
if(Bid- StopLoss> StopLevel-0.5*Point)//можно попробовать убрать строку

気づいたのはそれだけです。のために変更されたことを説明した方が、今後のために心に留めておけるからです)。

 
ALex2008 >> :

よくわからないけど...)

また、MarketInfo()はdouble型を返しますが、なぜPointに変換するのでしょうか・・・?

こちらも...。


0.5*Pointはデルタなので、0.7に変換することもできます :)

実数の比較をご覧ください。

は、おそらくなくても正常に動作します。)


というエラーが発生しました。

MarketInfo(Symbol(),MODE_STOPLEVEL)

をPointに乗じた値をpips単位で返します。


でした。

            if(Bid- StopLoss< StopLevel) StopLoss=MathMin( b0, b1); 
            else OrderModify(OrderTicket(),OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);

trueの場合、StopLossに新しい値が割り当てられます。

それ以外の場合は、順序が変更されます。

エラーは出ないが、クロスを脱ぐかズボンを履かなければならない)