حسنًا ، لقد تمكنت من إنشاء EA يمكنها التعامل مع وحدات متزامنة بمعلمات تداول مختلفة يمكن تشغيلها في الوقت نفسه أو تشغيلها وإيقاف تشغيلها. على الرغم من أنني أركض في جدار مع التعامل مع عدد الطلبات.
أرغب في الحصول على عدد ET MaxTotalPositions ضد إجمالي المواضع لـ ModuleA و إجمالي المواضع لـ ModuleB. يجب ألا يتجاوز EA أقصى إجمالي (A = B) ، ولكن يجب ألا يتجاوز TotalforModuleA و B على التوالي. على سبيل المثال ، إذا كان MaxTotal هو 2 ، وكان إجمالي ModuleA و B واحدًا لكل منهما ، فلا يمكن أن يتجاوز 2. هذا الجزء سهل. ومع ذلك ، إذا كان Max هو 2 ، و ModuleA هو 1 ، فإنه لا يزال يتداول حتى 2. لقد حاولت استدعاء الأوامر عن طريق السحر لجعلها أسهل في العد ولكن في مكان ما هو overcounting MaxPerModule. هل لديها أي فكرة عن كيفية التعامل مع هذا؟ يتم تجميع التعليمات البرمجية بشكل صحيح حتى لا توجد أخطاء في بناء الجملة. وهنا جزء من التعليمات البرمجية:
/////////////////////////////////////////////////////////////////////////////
تم الإعلان عن TotalMaxPositions عالميًا في الجزء العلوي من EA كمتغير خارجي
extern double TotalMaxPositions = 2؛
//////////////////////////////////////////////////////////////////////////////
//------------------------------------------------ -
//MAX POSITIONS ORDER COUNT
//------------------------------------------------ -
int TotalCurrentOrders؛
عدد int = 0؛ عدد int = 0؛ مجموع int totalB ؛
TotalCurrentOrders = OrdersTotal ()؛
if (TotalCurrentOrders gt؛ = TotalMaxPositions) return (0)؛
آخر
if (TotalCurrentOrders lt؛ TotalMaxPositions)
{
إذا (countA gt؛ = MaxPositionsA) return (0)؛
إذا كانت (countA lt؛ MaxPositionsA)
لـ (int posA = 0؛ posa lt؛ totalA؛ posA )
{
إذا استمر (OrderSelect (posA، SELECT_BY_POS) == false)؛
if (OrderMagicNumber () == MagicA) countA ؛
}
إذا كانت (countB gt؛ = MaxPositionsB) ترجع (0)؛
إذا كانت (countB lt؛ MaxPositionsB)
لـ (int posB = 0؛ posB lt؛ totalB؛ posB )
{
إذا استمر (OrderSelect (posB، SELECT_BY_POS) == false)؛
if (OrderMagicNumber () == MagicB) countB ؛
}
if (TotalCurrentOrders gt؛ = TotalMaxPositions) return (0)؛
}