int mod_b() { //--------------------------------------------------------------- 2 -- for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер { if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий { // Анализ ордеров: int Tip=OrderType(); // Тип ордера if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер double SL=OrderStopLoss(); // SL выбранного орд. double TP =OrderTakeProfit(); // TP выбранного орд. double Price =OrderOpenPrice(); // Цена выбранн. орд. int Ticket=OrderTicket(); // Номер выбранн. орд. //------------------------------------------------------ 3 -- while(true) // Цикл модификации { double TS=Tral_Stop; // Исходное значение int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1)) if (TS < Min_Dist) // Если меньше допуст. TS=Min_Dist; // Новое значение TS //--------------------------------------------------- 4 -- bool Modify=false; // Не назначен к модифи switch(Tip) // По типу ордера { case 0 : // Ордер Buy if (NormalizeDouble(SL,Digits)< // Если ниже желаем. NormalizeDouble(Bid-TS*Point,Digits)) { SL=Price+18*Point; // то модифицируем его string Text="Buy "; // Текст для Buy Modify=true; // Назначен к модифи. } break; // Выход из switch case 1 : // Ордер Sell if (NormalizeDouble(SL,Digits)> // Если выше желаем. NormalizeDouble(Ask+TS*Point,Digits) || NormalizeDouble(SL,Digits)==0)//или равно нулю { SL=Price-18*Point; // то модифицируем его Text="Sell "; // Текст для Sell Modify=true; // Назначен к модифи. } } // Конец switch if (Modify==false) // Если его не модифи break; // Выход из while //--------------------------------------------------- 5 --
Alert ("Модификация ",Text,Ticket,". Ждём ответ.."); bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его! //--------------------------------------------------- 6 -- if (Ans==true) // Получилось :) { Alert ("Ордер ",Text,Ticket," модифицирован:)"); break; // Из цикла модифи. }
int mod_f() { //--------------------------------------------------------------- 2 -- for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер { if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий { // Анализ ордеров: int Tip=OrderType(); // Тип ордера if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер double SL=OrderStopLoss(); // SL выбранного орд.
int f = 3; //номер бара с которого идет проверка наличия фрагтала int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower) double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower) while (f < Bars && (UpFr == 0 || DnFr == 0)) { if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0) if (UpFr == 0) { UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy) UpN = f; } if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0) if (DnFr == 0) { DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell) DnN = f; } f++; } //------------------------------------------------------ 3 -- while(true) // Цикл модификации { double UD; double TS=UD; // Исходное значение int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист if(Tip==0) UD=DnFr; if(Tip==1) UD=UpFr; if (TS < Min_Dist) // Если меньше допуст. TS=Min_Dist; // Новое значение TS //--------------------------------------------------- 4 -- bool Modify=false; // Не назначен к модифи switch(Tip) // По типу ордера { case 0 : // Ордер Buy if (NormalizeDouble(SL,Digits)< // Если ниже желаем. NormalizeDouble(UD,Digits)) { SL=UD; // то модифицируем его string Text="Buy "; // Текст для Buy Modify=true; // Назначен к модифи. } break; // Выход из switch case 1 : // Ордер Sell if (NormalizeDouble(SL,Digits)> // Если выше желаем. NormalizeDouble(UD,Digits) || NormalizeDouble(SL,Digits)==0)//или равно нулю { SL=UD; // то модифицируем его Text="Sell "; // Текст для Sell Modify=true; // Назначен к модифи. } } // Конец switch if (Modify==false) // Если его не модифи break; // Выход из while //--------------------------------------------------- 5 -- double TP =OrderTakeProfit(); // TP выбранного орд. double Price =OrderOpenPrice(); // Цена выбранн. орд. int Ticket=OrderTicket(); // Номер выбранн. орд.
Alert ("Модификация ",Text,Ticket,". Ждём ответ.."); bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его! //--------------------------------------------------- 6 -- if (Ans==true) // Получилось :) { Alert ("Ордер ",Text,Ticket," модифицирован:)"); break; // Из цикла модифи. }
if (!IfTrueThenCountBarWork) return (0); for (int i = OrdersTotal() - 1; i >= 0; i--) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES) if (OrderMagicNumber() == 700000) <---- IN THIS STROKE SPEAKS ERROR!!!! CloseAfterSomeBar (CountBar、OrderTicket()) }
移動した。
qaz2005 2011年10月11日 09:30
皆さん、こんにちは。 カスタムインジケータがあり、2つのオブジェクトを持っています。その値はわかるのですが、トップラインなのかボトムなのか、区別する方法がないのです。インストール時に設定がなく、バッファの数、順番がわかりません。インターネット上で色の設定もバッファとして行くことを読んで、どのように関数iCustom()または多分このポイントを動作させるために他の関数を介してそれらを参照するのですか?
ありがとうございました。
P.S. MQL4言語に関する文献はありますか?すでにMQL4のチュートリアルをダウンロードし、ほぼ終了しています。
バッファ番号は "0 "からカウントされます。
iCustom(NULL, 0, "ind",150, 0,2);
ここで、150は期間である。
0はバッファ。
2はバーです。
https://docs.mql4.com/ru/indicators/iCustom
たとえば
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
ということは、青=0バッファーである可能性が高い
と赤=1
アレキサンダー!体験談をありがとうございます。しかし、その途中で疑問が生じました。通貨の列挙はどのように行われるのでしょうか?それとも、Symbol()の代わりにOrderSend()のf-iの通貨名でしょうか?また、例のコードの入れ方を説明していただけませんか?また、お世話になります:)
ローマン、 基本的に説明しました。
Expert AdvisorでSymbol()が指定されている箇所には、SymbolMax[nnnn]などと記述してください。OrderSend()では、以下のようになります。tick=OrderSend(SymbolMax[nnnn],OP_BUYSTOP,L、ur、0、sl、tp、CMM、MAGIC[I]、0、赤);
Expert Advisorに書いたので、そこに自分の値を設定する。通貨の一覧などを設定することができます。
文字列 SymbolMax[4] = {"EURUSD", "GBPUSD", "USDCHF", "USDJPY"}。
もしかしたら、誰かが別の方法で実装しているかもしれませんが、これが私の通貨ルックアップです - 以下のコードを参照してください。関数の最初にstartと入れています。さらに、メッセージが飛び交わないように、5秒間のディレイをかけるようにしました。
改造がループして困っています。
修正はユーザー定義関数として表現されます。
最も興味深いのは、標準のトロール機能はこれらの両方の関数で動作し、私は単独で大丈夫ですが、私はbreakevenとフラクタル改造を使用すると、私はフラクタルとbreakevenと無限の修飾を取得することです。
https://book.mql4.com/ru/trading/ordermodify の改造をベースにしました。
Breakevenを修正する基準が正しく設定されていない印象があるのですが、ループしないように修正するにはどうしたらよいでしょうか?
//ф-я модификации ордеров безубыток
int mod_b()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1))
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Price+18*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=Price-18*Point; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
//------------------------------------------------------обсчет фрактала
int f = 3; //номер бара с которого идет проверка наличия фрагтала
int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower)
double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower)
while (f < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy)
UpN = f;
}
if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell)
DnN = f;
}
f++;
}
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double UD;
double TS=UD; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
if(Tip==0)
UD=DnFr;
if(Tip==1)
UD=UpFr;
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(UD,Digits))
{
SL=UD; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(UD,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=UD; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}
こんにちは フォーラムユーザーの皆様。
他の時間軸の見積もりを依頼したいのですが?Dのテンプレートがあり、私のインジケータは小さい時間枠(例えばM30、H1、H4)からLOW、HIGH、OPEN、CLOSEの引用を必要としています。
こんにちは フォーラムユーザーの皆様。
他の時間軸の見積もりを依頼したいのですが?Dのテンプレートがあり、私のインジケータは小さい時間枠(例えばM30、H1、H4)からLOW、HIGH、OPEN、CLOSEの引用を必要としています。
今晩は。このエラーの原因を教えてください。
//+------------------------------------------------------------------------+
//| Startfunction|
//+------------------------------------------------------------------------+
void start()
{
//---- history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- current symbol で open orders を計算
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
if (!IfTrueThenCountBarWork) return (0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- この行はエラーです!!!!
CloseAfterSomeBar (CountBar, OrderTicket());
}.
}
皆さん、こんばんは。このエラーは何なのか教えてください。
//+------------------------------------------------------------------+
//| 機能開始
//+------------------------------------------------------------------+
void start()
{
//---- 履歴と取引を確認する
if(Bars<100 || IsTradeAllowed()==false) return;
//---- 現在のシンボルで未決済注文を計算する
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose()。
if (!IfTrueThenCountBarWork) return (0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- IN THIS STROKE SPEAKS ERROR!!!!
CloseAfterSomeBar (CountBar、OrderTicket())
}
}
PapaYozh:
Пропущен символ ";"
ありがとうございます!!!最初は気がつかなかった)))
専門家にもう一つの質問です。どのように正確に開始条件を入力する:Close[2]<Close[3] by n % for sell。
void CheckForOpen()
{
double ma;
int res;
//---- 新しいバーの最初のティクスのみ取引に行く
if(Volume[0]>1) return;
//----移動平均を 取得
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0)
//---- 売り条件
if(Open[1]>ma && Close[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,",MAGICMA,0,Red);
return;
} }.
//---- 買いの条件
if(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,",MAGICMA,0,Blue);
return;
} }.
どこで間違ったのか、教えてください。それともMT4自体がそんなバカなのか、私の買い注文はHighバーでしか開かず、売り注文はCloseバーでしか開きません =)。Expert Advisorのコードにはこの条件すら規定されていませんが =)