//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
ResetLastError(); // установим значение предопределенной переменной _LastError в нольif(!PositionSelect(_Symbol))
PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = %lu", _Symbol, GetLastError());
int pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позицийif(pos_total > 0) // если есть открытые позиции
{
for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
{
if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
{
ulong pos_id = PositionGetInteger(POSITION_IDENTIFIER);
double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
double pos_tp = PositionGetDouble(POSITION_TP);
double pos_sl = PositionGetDouble(POSITION_SL);
PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
}
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Open_Add_Pos_Buyl()
{
for(int i=pos_total-1; i<pos_total; i++) // ищем последнюю по списку открытую позицию
{
PositionGetTicket(i); // получим тикет позиции по индексу в списке открытых позиций
if(PositionGetString(POSITION_SYMBOL) == _Symbol && // если совпадает символ открытой позиции
PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && // если совпадает тип открытой позиции
PositionGetInteger(POSITION_MAGIC) == Magic_Number) // и если совпадет мэджик
{
double pos_price_open=PositionGetDouble(POSITION_PRICE_OPEN); // объявим и инициализируем переменную для цены открытой позиции
if(// тут задано условие для открытия позиции)
{
double new_price_pos=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
trade.Sell(0.01,_Symbol,new_price_pos,0,0);
}
}
}
}
今、手に入れた。ありがとう!少なくとも1つのオープンポジションがあれば、エラーコード4753は表示されないことがわかりました。
ありがとう、ウラジミール。
次のように書くと表示されます。
次のように書くと表示される。
こんにちは、アレクセイ。ループの代わりにPositionSelect() を使う必要があるのでしょうか?
ウラジミール。
こんにちは、アレクセイ。ループの代わりにPositionSelect() を使う必要があるのでしょうか?
ウラジミール、よろしく。
存在しない文字を書くとエラーになります。
どのように書いても構わない。主なことは、存在しない文字を書くとエラーになるということだ......。
でも、スリッパは投げないでね!!!エラーコードが出ない。((((
よろしく、ウラジミール。
エラー = "
そこに指定子があるはずだ
アルテム、ありがとう!本当にありがとう!
ありがとう、ウラジミール
要するに、ここに 書かれている問題を別の方法で解決したのだ:
ありがとう、ウラジミール。
皆さんこんばんは!
既存のオープンポジションに 追加ポジション(ストップ&テイクなし)をオープンする関数を作ろうとしています。コードを書きました:
しかし、なぜかオープンポジションが表示されません。デバッガで問題を見つけようとしたのですが、ループを開始した後、関数の中に何が書かれているかを見ることなく、すぐに関数を抜けてしまいます。私のコードのどこにバグがあるのか教えていただけませんか?
よろしくお願いします。
しかし、なぜかオープンポジションが表示されません。デバッガで問題を見つけようとしたのですが、ループを開始した後、関数の中に何が書かれているかを見ることなく、すぐに関数を抜けてしまいます。PositionGetTicket(i)にブレークポイントを置いたのですが、私のコードのどこにバグがあるのか教えていただけませんか?
よろしくお願いします。
pos_total とは何ですか?
pos_totalは何と等しいか?
こんにちは、アレクセイ、変数pos_total=PositionsTotal()ですが、グローバルレベルで設定されていました。今、私はそれを関数の中に移動させ、それが問題であったことが判明しました。すべてうまくいきました。何が問題なんだ?トリックが全く理解できなかった!!!
試しに、pos_totalをグローバルレベルに移動してみたら、また動かなくなった!少なくとも僕にとっては!)))
グローバル・レベルの変数は、関数では初期化できないのですか?そうなんですか?
ありがとう、ウラジミール。